文字列全体が JSON テキスト (JSON ではないものを含む) であることを文字通り意味する場合は、次の 3 つの問題があります。
これは単なる JSONフラグメントであり、完全な JSON ドキュメントではありません。
文字列内のリテラル改行は JSON では無効です\n
。
\x
は、JSON 文字列の無効なエスケープ シーケンスです。含まれている JSON 以外のテキストに\x
エスケープが必要な場合 (たとえば、文字列全体の値を読み取って解析する場合)、そのバックスラッシュをエスケープする必要があります\\x
。
完全な JSON ドキュメントでは、トップ レベルはオブジェクトまたは配列である必要があります。
{"prop": "value"}
[1, 2, 3]
ほとんどの JSON パーサーは、スタンドアロンの文字列などのフラグメントの解析をサポートしています。(たとえば、JavaScriptJSON.parse
はこれをサポートしています。)ただし、 http://jsonlint.comは完全なドキュメント解析を行っています。
改行と\x
問題が処理されたオブジェクトにラップされたフラグメントを次に示します。
{
"stuff": "{\n 'places': [\n {\n 'name': 'New\\x20Orleans,\n \\x20US\\x20\\x28New\\x20Lakefront\\x20\\x2D\\x20NEW\\x29',\n 'code': 'NEW'\n }\n \n ]\n }"
}
文字列内のテキストも有効な JSON ではありませんが、おそらく意図されたものではありません。完全を期すために: JSON では、すべてのキーと文字列を単一引用符 ( ) ではなく、二重引用符 ( ) で囲む必要があります。また、文字列リテラル内でリテラルの改行を許可せず (代わりに使用)、エスケープをサポートしていません。詳細については、 http://json.orgを参照してください。"
'
\n
\x
正しい JSONエスケープ\x
に変換された有効な JSON としてのバージョンを次に示します。\u
{
"places": [
{
"name": "New\u0020Orleans,\n\u0020US\u0020\u0028New\u0020Lakefront\u0020\u002D\u0020NEW\u0029",
"code": "NEW"
}
]
}
...また、これらのエスケープはすべて、実際には完全に通常の文字を定義しているため、次のようになります。
{
"places": [
{
"name": "New Orleans,\n US (New Lakefront - NEW)",
"code": "NEW"
}
]
}