文字列 "u"をJSON文字列に格納したいとします。
この回答はJSONのエスケープシーケンスの見栄えの良い概要を提供しますしかし、それが同時に見えているのか、順番になっているのかは、その絵からは明らかではありません。
次のJSONを考えてください。
{
"foo": "a\u"
}
これは - 少なくとも私には - 有効なJSONであるはずです。 foo
文字列を含む au
.
しかしながら u
Unicode文字のエスケープシーケンスで、通常は4つの16進文字を続ける必要があります。
私が同じJSONに入ったとき Json Parser Online私が使うと信じて JSON.stringify
"uの後には4つの16進文字が続く必要があります"というエラーが発生します。
また、FirefoxとChromeの両方のコンソールに次のように入力してみた。
var json = JSON.stringify(eval("(" + "{"foo": "a\u"}" + ")"));
そして両方ともUnicodeエスケープシーケンスエラーを引き起こします。図書館でも Delphiのスーパーオブジェクト 同じエラーが発生します(または実際には、単にJSON解析エラーが発生します)。
を見て RFC 7159 文字列では、これらのエスケープシーケンスについて言及していますが、順序については言及していません。
私にはJSON規格は次の順序を考慮していないようです \u
または、少なくとも、パーサーはそれをうまく処理できません。 \
最初にエスケープされます、 \u
〜になる u
そして u
間違っているでしょう。もし u
最初にエスケープされ、それがに到達する前にエラーが発生します。 \
.
これは特に問題です。 JSONのリッチテキスト、なぜなら、 uc1
そして uc2
RTFの一般的な制御シーケンスです。問題となっている答えは、実際にはその主題に触れているわけではありませんが、その質問もまた放棄されているようです。
理論的な質問は、エスケープシーケンスはどのように(そしてどのように)すべきかということです。
そしてもっと実用的な質問は、文字列リテラルをどうやって取得するかです。 u
単純にどちらかのUnicodeシーケンスを提供する以外にJSON文字列に または
u
(例えば。 au005Cu
)?
回答:
回答№1は1JSONのエスケープシーケンスの順序は何ですか?
左から右へ。 \u
文字列を含む あなた.
文字列リテラルuをJSON文字列に変換する方法
"\u"
Json Parser Onlineで同じJSONを入力すると、JSON.stringifyを使用すると、「uの後に4つの16進文字が続く必要があります」というエラーが発生すると考えられます。
これはそのツールのバグのようです。
ブラウザのJSON.parseを使った単純な構文解析でもうまくいきます。
// Note: The slashes have to be escaped to be put in the JS string literal.
var json = `{
"foo": "a\\u"
}`;
console.log("JSON is: " + json);
var object = JSON.parse(json);
console.log("String in parsed object is: " + object.foo);
var json = JSON.stringify(eval("(" + "{"foo": "a\u"}" + ")"));
中 JSONのエスケープ文字です。 また、 JavaScriptの文字列リテラルのエスケープ文字。
JavaScriptパーサーが変換します "a\u"
に au 前 に渡す eval()
これはJavaScriptの文字列リテラル(しかし無効なもの)として解析しようとします。 前 でJSONに変換しようとしています JSON.stringify
)。