formatJson
JSON を読みやすく整えます。オブジェクトでも、整え直したい JSON 文字列でも受け付けます。
API
formatJson(value, onError?, indent?)
| パラメーター | 説明 | 型 | 既定値 |
|---|---|---|---|
value | オブジェクト、または JSON 文字列(シングルクォートも許容します) | string | object | 必須 |
onError | 解析や直列化のエラーを受け取って呼ばれます | (e: Error) => void | 何もしない |
indent | 段ごとの空白の数 | number | 4 |
整えたあとの文字列を返します。入力を解析できないときは '' を返します。
使用例
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)); // '' が返り、エラーはコールバックへ補足
- 文字列を渡すと、そのまま返さずに解析し直します。 これで正しさを確かめられ、呼び出し元の空白の入れ方に頼らず体裁も揃います。
- エラーは通知するだけで、投げません。 不正な JSON、循環した構造、
JSON.stringifyが扱えない値は、いずれも''を返してonErrorを呼びます。
0.3 で書き直しました
以前は約 90 行の自作の整形処理で、波かっこ・角かっこ・カンマのまわりに正規表現で改行を差し込んで体裁を組み直し、そのあと行ごとに引用符を数えて文字列リテラルの中の壊れを直そうとしていました。エスケープされた引用符をうまく扱えず、文字列の値の中にある 波かっこやカンマまで構造とみなしたので、{ css: 'a { color: red, }' } は壊れて出てきました。いまは前段にゆるい解析を置いた JSON.stringify です。正しく、しかもずっと速くなりました。出力の空白の入り方は、以前の独自の体裁ではなく JSON.stringify に揃います。