parsing - JavaScript JSON-parser som viser feilsted
Jeg har hatt noen problemer med å analysere JSON som mottas via WebSocket (opprinnelig spørsmål - Parse JSON mottatt med WebSocket gir feil). JSON-strengen i seg selv er gyldig (testet med flere JSON-validatorer), men JSON.parse kaster et unntak. Jeg prøver å finne ut nøyaktig hva det er den ikke kan analysere, men det eneste jeg får er "SyntaxError: unexpected_token ILLEGAL", den sier ikke hvor den eksakte posisjonen til den mislykkede tokenen er. Finnes det noen måte å hente ut slik informasjon på?
Oppdatering: Hvis jeg kopierer og limer den JSON-strengen til en statisk fil (f.eks. "data.json") og deretter henter den og parser den med samme funksjon (JSON.parse) - så fungerer det fint. Så jeg antar at det skjer noe trikst, jeg tenkte på linjeskift-symbol (kanskje det var \n i stedet for \r\n eller omvendt) men å fjerne alle linjeskift hjalp ikke. Jeg vil tro at det godt kan være et kodingsproblem, men dataene mottas via websocket og ifølge dokumentasjonen er det en utf-8 streng.
2. oppdatering: DET FUNGERER helt fint hvis jeg bruker "json_parse" herfra: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js Da fungerer det fint! Betyr det at dette er en feil i "JSON.parse" implementeringen brukt av Chrome, eller hva?
Takk.
Svar #1
Du kunne kopiere en implementering av JSON.parse() fra et sted (som for eksempel fra jQuery), endre navnet slik at du kan kalle det direkte, justere implementeringen slik at den aldri oppdager den innebygde parseren slik at den alltid bruker JS-parseren, og deretter endre koden din til å bruke den nye JS-versjonen av parseren, og så spore gjennom den i en JavaScript-debugger til du finner hva den ikke liker.
Svar #2
En ting å sjekke er om du har anførselstegn og skråstreker i JSON-strengen din. Hvis ja, må de slås ut:
{
"key": "i've \"quotes\" in me",
"key2": "and \\slashes too"
}
I tillegg gir JSONLint deg nøyaktig plassering av feilen.
Ifølge JSON.org kan du ikke ha anførselstegn og skråstreker i strengene dine, så du må flykte dem.
