/ / Sú únikové sekvencie uniknuté v poradí alebo súčasne v JSON? - json

Sú sekvencie úniku v poradí alebo súčasne v JSON? - json

Predstavte si, že chcem, aby doslovný reťazec "u" bol uložený v reťazci JSON.

Táto odpoveď poskytuje pekný vizuálny prehľad únikových sekvencií v systéme JSON, ale z jej obrazu nie je jasné, či unikli súčasne alebo v poriadku.

Zvážte nasledujúci JSON:

{
"foo": "a\u"
}

To mi - aspoň pre mňa - malo byť platné JSON, kde foo obsahuje reťazec au.

však u je úniková sekvencia znakov Unicode a musí - zvyčajne - nasledovať štyri hexadecimálne znaky.

Keď vstúpim do rovnakej JSON cez Json Parser Online, ktoré verím, že používa JSON.stringify zobrazí nasledujúcu chybu: "musí nasledovať štyri hexadecimálne znaky".

Tiež som sa pokúsil napísať nasledovné do konzoly Firefoxu a Chrome:

var json = JSON.stringify(eval("(" + "{"foo": "a\u"}" + ")"));

A obaja prinášajú chybovú sekvenciu Unicode escape sequence. Dokonca aj knižnica superobjekt pre Delphi prináša rovnakú chybu (alebo v skutočnosti iba vrhá chybu analyzovania JSON).

Pri pohľade cez RFC 7159 na reťazcoch sa spomína tieto únikové sekvencie, ale žiadna zmienka o poradí.

Zdá sa mi, že štandard JSON neberie do úvahy nasledujúcu sekvenciu \u, alebo prinajmenšom analyzátori nerobia dobre \ prvý unikol, \u stáva u a u bude zle. ak u je najprv utečenec, potom to prináša chybu skôr, než sa dostane k \.

To je obzvlášť problém bohatý text v JSON, pretože uc1 a uc2 sú spoločné kontrolné sekvencie v RTF. Zodpovedaná odpoveď sa na túto tému skutočne nedotkne, ale otázka sa zdá byť skoro opustená.

Takže teoretická otázka by bola: Ako (a ako by mali) utiecť sekvencie uniknúť?

A praktickejšia otázka by bola: Ako môžem dostať reťazec doslovne u do reťazca JSON za jednoduchým poskytnutím sekvencie Unicode pre jeden alebo u (Napr. au005Cu)?

odpovede:

1 pre odpoveď č. 1

Čo je poradie escape sequence v JSON?

Zľava doprava. \u obsahuje reťazec u.

Ako môžem získať reťazec literal u do reťazca JSON?

"\u"

Keď zadám rovnaký JSON cez Json Parser Online, ktorý podľa môjho názoru používa JSON.stringify, prináša nasledujúcu chybu: "musí nasledovať štyri hexadecimálne znaky".

Zdá sa, že to je chyba v tomto nástroji.

Priama analýza s prehliadačom JSON.parse funguje dobre:

// 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"}" + ")"));

zatiaľ čo je unikátny znak v JSON, to je tiež únikový znak v literálnom reťazci jazyka JavaScript.

Analyzátor JavaScript bude konvertovať "a\u" na au pred odovzdávať ho eval() ktorý sa bude snažiť analyzovať ho ako reťazec JavaScript doslovný (ale neplatný), pred pokúsiť sa premeniť na JSON s JSON.stringify).