Skip to content

formatJson

JSON を読みやすく整えます。オブジェクトでも、整え直したい JSON 文字列でも受け付けます。

API

formatJson(value, onError?, indent?)

パラメーター説明既定値
valueオブジェクト、または JSON 文字列(シングルクォートも許容します)string | object必須
onError解析や直列化のエラーを受け取って呼ばれます(e: Error) => void何もしない
indent段ごとの空白の数number4

整えたあとの文字列を返します。入力を解析できないときは '' を返します。

使用例

js
import { formatJson } from 'ranuts';

formatJson({ a: 1, b: [2, 3] });
formatJson("{'a': 1}"); // シングルクォートも許容
formatJson({ a: 1 }, undefined, 2); // 空白 2 つの字下げ
formatJson('nope', (e) => console.warn(e)); // '' が返り、エラーはコールバックへ

補足

  1. 文字列を渡すと、そのまま返さずに解析し直します。 これで正しさを確かめられ、呼び出し元の空白の入れ方に頼らず体裁も揃います。
  2. エラーは通知するだけで、投げません。 不正な JSON、循環した構造、JSON.stringify が扱えない値は、いずれも '' を返して onError を呼びます。

0.3 で書き直しました

以前は約 90 行の自作の整形処理で、波かっこ・角かっこ・カンマのまわりに正規表現で改行を差し込んで体裁を組み直し、そのあと行ごとに引用符を数えて文字列リテラルの中の壊れを直そうとしていました。エスケープされた引用符をうまく扱えず、文字列の値の中にある 波かっこやカンマまで構造とみなしたので、{ css: 'a { color: red, }' } は壊れて出てきました。いまは前段にゆるい解析を置いた JSON.stringify です。正しく、しかもずっと速くなりました。出力の空白の入り方は、以前の独自の体裁ではなく JSON.stringify に揃います。

MIT ライセンスのもとで公開されています。