2013-03-08 9 views
13

otrzymam tę odpowiedź z żądania POST przy użyciu $ .ajax():JSON błąd składni: „Numer nieoczekiwane” lub „JSON.parse: oczekiwano”, „lub«}»po wartości nieruchomości w obiekcie”

{"command": 6,"log_size":50,"log":[ 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047161877,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 0000011410,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 0000011411,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 0000011411,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 0000011412,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047215799,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 1047215799,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047215800,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047215800,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047217510,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047217511,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047217511,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047217956,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047217957,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047217957,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047218051,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 1047218051,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047218052,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047218052,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 0000002598,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047068795,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047068796,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 1047071223,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047071224,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047071225,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 0000000010,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 0000000012,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0C","ti": 1047130533,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 0000000026,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 0000000180,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 0000000206,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "09","ti": 0000000212,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "08","ti": 0000000383,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 0000001562,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 0000001563,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 0000001564,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 0000001564,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047159660,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 1047159660,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047159661,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047159662,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047160593,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047160593,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047160594,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047161631,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0A","ti": 1047161631,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047161632,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0D","ti": 1047161632,"to": 0}, 
    {"type": 30,"tag": " __START__","sensors": "00","ti": 1047161875,"to": 0}, 
    {"type": 30,"tag": "*NETEVENT*","sensors": "0B","ti": 1047161876,"to": 0} 
], 
"response":"ok"} 

dla IE działa dobrze, w Chrome pojawia "Syntax error: unexpected number" i Firefox wiadomość jest "SyntaxError: JSON.parse: expected ',' or '}' after property value in object"

w różnych analizatorów JSON internetowych i walidatory format odpowiedzi wydaje się być OK, ale w firefox z d chrome nie działa.

Każdy pomysł, dlaczego tak się dzieje?

+1

Otrzymuję błąd sprawdzania poprawności dotyczący wartości '0000000206' z pierwszym walidatorem JSON znalezionym w Google. – JJJ

+0

[this] (http://jsonlint.com/) może być przydatny podczas sprawdzania poprawności łańcucha json –

Odpowiedz

33

Liczba nie może zaczynać się od nieistotnej wartości 0.

To nieważne: "ti": 0000011410

Od JSON.org:

enter image description here

Należy naprawić u źródła, ale jeśli nie można, zakładając swoją JSON jest zawsze podobny do tego (bez numerów w łańcuchach), to prawdopodobnie możesz to naprawić za pomocą wyrażenia regularnego:

var obj = JSON.parse(str.replace(/ 0+(?![\. }])/g, ' ')); 

Nie można nawet tutaj użyć zło eval ponieważ "0000011410" będzie analizowany jako ósemkowej:

console.log(eval('({"ti": 0000011410})')); 

wyjść

{ti: 4872} 

To prawdopodobnie wyjaśnia, dlaczego uznano za bezpieczniejsze zabronić numery zaczynające się non znaczące 0 w JSON.

+5

dobrze zauważony ... – Alnitak

+1

Świetna odpowiedź. Warto wspomnieć, że ósemkowe literały są również zabronione w trybie ścisłym JavaScript. Otrzymasz następujący błąd w kodzie JavaScript 'SyntaxError: Literały ósemkowe nie są dozwolone w trybie ścisłym." –

Powiązane problemy