alltools.one
JSON
2025-06-17
6 min
alltools.one Team
JSONEditorProductivityDeveloper ToolsTips

JSONエディターのコツ:大きなドキュメントで効率的に作業する

現代の開発ではJSONを扱うことは避けられません。APIレスポンス、設定ファイル、データベースエクスポート — JSONはあらゆる場所にあります。ファイルが数千行に達すると、効率的な編集ツールとテクニックが、数分で済むか数時間かかるかの違いを生みます。

フォーマットと可読性

自動フォーマット

大きなJSONドキュメントでまず行うべきはフォーマットです。圧縮されたJSONは読めません:

{"users":[{"id":1,"name":"Alice","roles":["admin","editor"]},{"id":2,"name":"Bob","roles":["viewer"]}]}

フォーマット済み:

{
  "users": [
    {
      "id": 1,
      "name": "Alice",
      "roles": ["admin", "editor"]
    },
    {
      "id": 2,
      "name": "Bob",
      "roles": ["viewer"]
    }
  ]
}

JSONフォーマッターで即座にJSONをフォーマット — ペースト、フォーマット、コピー。

コマンドラインフォーマット

# jq - 標準ツール
cat data.json | jq .

# Python(組み込み)
python3 -m json.tool data.json

# Node.js
node -e "process.stdout.write(JSON.stringify(JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')),null,2))" < data.json

ナビゲーションテクニック

ツリービュー vs テキストビュー

1000行を超えるドキュメントでは、テキスト編集よりツリービューの方が実用的です:

  • ノードの折りたたみ/展開で関連セクションに集中
  • パンくずナビゲーションで階層内の現在位置を表示
  • サブツリー内検索でノイズをフィルタリング

JSONPathによるターゲットアクセス

数千行をスクロールする代わりに、JSONPathで必要なデータに直接ジャンプ:

# 3番目のユーザーのメールアドレスを取得
cat users.json | jq '.[2].email'

# すべての管理者ユーザーを取得
cat users.json | jq '.[] | select(.role == "admin")'

詳しくはJSONPathクエリガイドをご覧ください。

バリデーション

構文エラーのキャッチ

よくあるJSON構文エラー:

  • 末尾のカンマ: {"a": 1, "b": 2,} — 許可されていない
  • シングルクォート: {'key': 'value'} — ダブルクォートを使用すること
  • 引用符なしのキー: {key: "value"} — キーは引用符で囲む必要がある
  • コメント: // this breaks — JSONにはコメント構文がない

ほとんどのエディターはこれらのエラーをリアルタイムでハイライトします。クイックバリデーションには、JSONバリデーターがエラーの正確な場所を特定します。

スキーマバリデーション

構文を超えて、JSONが期待される構造に一致するか検証:

# ajv-cliを使用
npx ajv validate -s schema.json -d data.json

包括的なカバレッジについてはJSONスキーマバリデーションガイドをご覧ください。

操作テクニック

キーのソート

一貫したキー順序でdiffがクリーンに:

jq -S . data.json > sorted.json

サブセットの抽出

必要なフィールドだけを取り出す:

# 各オブジェクトから特定のフィールドを抽出
jq '[.[] | {name, email}]' users.json

# 条件でフィルタリング
jq '[.[] | select(.age > 30)]' users.json

JSONファイルのマージ

# 2つのオブジェクトをマージ
jq -s '.[0] * .[1]' base.json override.json

# 配列を結合
jq -s '.[0] + .[1]' list1.json list2.json

構造の変換

# 配列からルックアップマップを作成
jq 'INDEX(.[]; .id)' users.json
# 結果: {"1": {"id": 1, "name": "Alice"}, "2": {"id": 2, "name": "Bob"}}

# ネスト構造のフラット化
jq '[.departments[].employees[]]' org.json

大きなファイルの操作

ストリーミングパース

数ギガバイトのファイルでは、ストリーミングですべてをメモリにロードすることを回避:

# jq ストリーミングモード
jq --stream 'select(.[0][-1] == "email") | .[1]' large.json

# Python ストリーミング
import ijson
for item in ijson.items(open('large.json'), 'item'):
    process(item)

分割して処理

# 大きな配列を個別ファイルに分割
jq -c '.[]' large_array.json | split -l 1000 - chunk_

# チャンクを並列処理
ls chunk_* | parallel jq '.name' {}

エディター別のヒント

VS Code

  • フォーマット: Shift+Alt+F(または Cmd+Shift+P → "Format Document")
  • 折りたたみ: ガターの矢印をクリックしてセクションを折りたたむ
  • JSON Schema: "$schema" を追加して自動補完を有効化
  • 設定: JSONファイルで "editor.formatOnSave": true

JetBrains IDE

  • 構造ビュー: Alt+7 でJSONツリーを表示
  • ナビゲーション: Ctrl+Click$ref を辿る
  • フォーマット: Ctrl+Alt+L で再フォーマット

FAQ

ターミナルでJSONを編集する最善の方法は何ですか?

クイック編集には jq が最強です — 1つのコマンドでJSONのクエリ、フィルタリング、変換ができます。インタラクティブな編集には fx(npmパッケージ)がシンタックスハイライトと折りたたみ機能を備えたターミナルベースのJSONエクスプローラーを提供します。シンプルなフォーマットには、追加の依存関係なしで python3 -m json.tool が動作します。

コメント付きJSON(JSONC)はどう処理しますか?

コメント付きJSON(VS Code設定、TypeScript設定で使用)は有効なJSONではありません。strip-json-comments のようなツールでパース前にコメントを削除できます。VS Codeでは、ファイルの関連付けを "JSON with Comments" に設定して適切なシンタックスハイライトを有効にしてください。

関連リソース

Published on 2025-06-17
JSON Editor Tips: Work Faster with Large Documents | alltools.one