JSON Pretty Print
ここで整形するか、Python・JavaScript・jqほか6言語のワンライナーをコピーできます。
貼り付けたものがブラウザの外に出ることはありません。 connect-src の許可リストにより、これは約束ではなくブラウザによる保証になっています。 自分で確かめる
プリティプリントと整形は、名前が2つあるだけで同じ操作です。上にドキュメントを貼り付ければここで実行できますし、いま使っている言語のワンライナーを持ち帰ることもできます。
以下の例は実際に動くほうの書き方です。出力がおかしくなってから初めて気づく類いの引数も含めてあります。
みんながつまずく引数
- Pythonのensure_ascii
- 既定値はTrueで、非ASCII文字をすべてエスケープします。人名や絵文字の多いドキュメントは、\uシーケンスの壁になって返ってきます。ensure_ascii=Falseを渡してください。
- 圧縮時のPythonのseparators
- separators=(",", ":")を渡さないかぎり、json.dumpsはカンマとコロンのあとに空白を残します。素朴な圧縮呼び出しは圧縮になっていません。
- PHPのスラッシュエスケープ
- json_encodeは既定でスラッシュとUnicodeをエスケープします。JSON_UNESCAPED_SLASHESとJSON_UNESCAPED_UNICODEで無効にできます。PHPはさらにスペース4個でインデントし、それを変更する手段はありません。
- GoのHTMLエスケープ
- エンコーダーは既定で<、>、&を\u003cなどにエスケープします。HTMLに安全に埋め込めるようにするためです。SetEscapeHTML(false)で無効になります。
- これらはいずれも数値を往復させる
- パースして再シリアライズすると数値のテキストは書き換わります。1.50は1.5になり、19桁のIDは末尾の桁を失います。例外はGoで、json.Indentは生のバイト列を扱います。
How to do this in code
9つの言語・ツールでのプリティプリント。
js JavaScript
JSON.stringify(JSON.parse(text), null, 2) py Python
json.dumps(json.loads(text), indent=2, ensure_ascii=False)
# From a file, on the command line
python -m json.tool --indent 2 --no-ensure-ascii in.json out.json sh jqとシェル
jq . file.json
curl -s https://api.example.com/x | jq .
pbpaste | jq . # macOS, from the clipboard
jq -S . file.json # sorted keys, for stable diffs go Go
json.Indentはデコードせずにバイト列を整形し直すので、数値には手が加わりません。
var out bytes.Buffer
json.Indent(&out, data, "", " ")
fmt.Println(out.String()) rb Ruby
JSON.pretty_generate(JSON.parse(text)) php PHP
json_encode(json_decode($text), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) java Java
ObjectMapper mapper = new ObjectMapper();
Object value = mapper.readValue(text, Object.class);
String pretty = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(value); rs Rust
serde_jsonのarbitrary_precision機能を有効にすると、往復しても数値のテキストがそのまま保たれます。
let value: serde_json::Value = serde_json::from_str(text)?;
let pretty = serde_json::to_string_pretty(&value)?; cs C#
using var doc = JsonDocument.Parse(text);
var pretty = JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }); よくある質問
- プリティプリントは整形やbeautifyと違うのですか?
- 違いません。3つとも、人が読めるように空白を加えることを指します。コミュニティごとに定着した呼び名が違うだけです。
- VS CodeでJSONを整形するには?
- ファイルを開いて、WindowsとLinuxならShift+Alt+F、macOSならShift+Option+Fを押します。無題のファイルに貼り付けた断片の場合は、先に言語モードをJSONに設定してください。そうしないとフォーマッターが何をすべきか判断できません。
- curlのレスポンスを整形するには?
- パイプでつなぎます。jqがあればcurl -s URL | jq .、なければcurl -s URL | python -m json.toolです。curlには-sを付けてください。付けないと進捗表示までパイプに流れ込みます。