このツールの動作
JSON の文字列リテラルは、それが表すテキストになります。"caf\u00e9" は café、"二\n行" は二行、"\ud83d\ude00" は絵文字です。サロゲート対は一文字であって、壊れた二つの片割れではありません。
引用符は省略できる
次のどちらも通ります。
"caf\u00e9"
caf\u00e9
これは意図した設計です。JSON の文字列が引用符付きのまま手元に来ることはまれで、ログの一行、git diff、スタックトレース、中身だけを引用したエラーメッセージから写すのが実際です。引用符を必須にすれば、毎回手で付け直すことになります。
その代償は小さく、はっきり述べておきます。裸の入力がたまたま別種の妥当な JSON——[1,2] や null——であった場合、それはテキストとして読まれます。ここで裸の断片が意味するのはそれだからです。リテラルとして解析されるのは引用符付きの入力だけです。
拒否は何がどこでかを述べる
JSON の文字列でない入力は、中途半端に復号せず拒否します。メッセージは原因を名指しします。
| 入力 | メッセージ |
|---|---|
a"b | Unescaped quotation mark at position 1: write it as \" |
"ab\q" | Unknown escape "\q" at position 3 |
"a\u12" | Invalid \u escape at position 2: four hexadecimal digits expected |
"abc | The opening quotation mark has no closing quotation mark |
{"a":1} | Expected a JSON string, found a JSON object |
位置は 0 から数え、あなたが貼り付けた文字列を指します。数字がそのまま該当の文字に導きます。
これをわざわざ書くのは、以前はそうでなかったからです。上のどの場合も Invalid JSON string escape sequence という一つの文言しか出しませんでした。貼り付けたオブジェクトはエスケープの誤りではありませんし、そう言われれば見当違いの場所を探すことになります。これはこのツールの実際の欠陥で、このページを書く過程で見つけ、直しました。
推測はしない
未知のエスケープは文字ではなく誤りです。\q は妥当な JSON ではありません。「たぶん q のつもりだろう」と決めれば、元の内容とわずかに違うテキストを返すことになります。三つ先のシステムで表面化する種類の差です。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。