Mám nejaké problémy s analýzou JSON, ktorá je prijatá s WebSocket (pôvodná otázka - Parse JSON prijal s výsledkami WebSocket chybu). Samotný reťazec JSON je platný (testovaný s niekoľkými validátormi JSON), ale JSON.parse uvádza výnimku. Snažím sa zistiť, čo presne nie je možné analyzovať, ale jediná vec, ktorú dostávam je "SyntaxError: unexpected_token ILLEGAL", nehovorí o tom, kde je presná pozícia neúspešného tokenu. Existuje nejaký spôsob, ako získať takéto informácie?
aktualizovať: Ak skopírujem vložený reťazec JSON na statický(napr. "data.json") a potom ju načítať a analyzovať ju s rovnakou funkciou (JSON.parse) - potom to funguje dobre. Takže za predpokladu, že sa tu niečo deje, pomyslel som si na symbol novej rady (možno n bol namiesto rn alebo naopak), ale úplné odstránenie všetkých zlomkov nepomohlo. Myslím si, že je to veľmi dobre môže to byť kódovací problém, ale dáta sú prijímané cez websocket a podľa dokumentácie je to reťazec utf-8.
2. Aktualizácia: IT funguje dobre, ak používam "json_parse" odtiaľto: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js Potom to funguje dobre! Znamená to, že ide o chybu v implementácii "JSON.parse" používanej prehliadačom Chrome alebo čo?
Ďakujem.
odpovede:
3 pre odpoveď č. 1Môžete skopírovať implementáciu JSON.(napr. z jQuery), zmeňte jej názov, aby ste ho mohli priamo zavolať, vylaďte implementáciu tak, aby nikdy nezačala vstavaný analyzátor, aby vždy používal analyzátor JS a potom zmeňte kód na použite novú verziu syntaktického analyzátora JS a následne ju prejdite do debuggeru javascript, kým nenájdete to, čo sa vám nepáči.
2 pre odpoveď č. 2
Jedna vec, ktorú treba skontrolovať, je, či máte v rámci reťazca JSON citácie a lomky. Ak áno, musia uniknúť:
{
"key": "i"ve "quotes" in me",
"key2": "and \slashes too"
}
tiež JSONLint poskytuje presnú polohu chyby.
Ako je to JSON.org, nemôžete mať úvodzovky a lomky vo vašich reťazcoch, takže ich musíte uniknúť.
1 pre odpoveď č. 3
Myslím, že nebudete musieť zavolať JSON.parse:
JSON.parse({"key": "whatever"}) // Syntax Error ILLEGAL
pretože to je už objekt.Já by som tiež zvedavý vidieť výsledok nasledujúceho kódu:
eval("(" + json + ")");
alebo
JSON.parse(decodeURIComponent(json));
0 pre odpoveď č. 4
Nemôžem povedať veľa s podrobnosťami, ale možnosť môže byť, že váš validátor robí nestriktné parsovanie a váš javascript môže robiť prísne analyzovanie ...