programing

JSON 구문 오류: '예상하지 않은 번호' 또는 'JSON.parse: 개체의 속성 값 뒤에 ' , 또는 '}'이(가) 있어야 합니다.'

padding 2023. 3. 29. 21:16
반응형

JSON 구문 오류: '예상하지 않은 번호' 또는 'JSON.parse: 개체의 속성 값 뒤에 ' , 또는 '}'이(가) 있어야 합니다.'

$.ajax()를 사용하여 POST 요청에서 다음 응답을 받습니다.

{"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": " __START__","sensors": "00","ti": 1047218051,"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": 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"}

IE가 정상적으로 동작하는 경우는, 「Chrome」라고 표시됩니다."Syntax error: unexpected number"파이어폭스에서 메시지는 다음과 같은 메시지가 표시됩니다."SyntaxError: JSON.parse: expected ',' or '}' after property value in object"

다양한 온라인 JSON 파서 및 검증기에서는 응답 형식이 정상인 것처럼 보이지만 Firefox 및 Chrome에서는 작동하지 않습니다.

왜 이런 일이 일어나는지 아세요?

숫자는 유의하지 않은 값으로 시작할 수 없습니다.0.

이것은 무효입니다."ti": 0000011410

JSON.org 에서 :

여기에 이미지 설명 입력

소스에서 수정해야 하지만 수정할 수 없는 경우 JSON이 항상 이와 비슷하다고 가정할 때(문자열에는 숫자가 없음) regex를 사용하여 수정할 수 있습니다.

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

넌 여기서도 악마를 쓸 수 없어eval왜냐면"0000011410"는 옥탈로서 해석됩니다.

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

출력

{ti: 4872}

이것은 왜 중요하지 않은 숫자로 시작하는 것을 금지하는 것이 안전하다고 생각했는지 설명할 수 있을 것이다.0JSON에서.

json의 숫자 앞에 0을 제거합니다.

언급URL : https://stackoverflow.com/questions/15296196/json-syntax-error-unexpected-number-or-json-parse-expected-or-after

반응형