정수가 선행 0으로 시작하는 경우 JSON이 유효하지 않은 이유는 무엇입니까?
Parse.com 프로젝트로 JSON 파일을 Import하고 있는데 "syslog key: value pair"라는 오류가 계속 나타납니다.
예기치 않은 "8"이 있음을 나타냅니다.
JSON의 예를 다음에 나타냅니다.
}
"Manufacturer":"Manufacturer",
"Model":"THIS IS A STRING",
"Description":"",
"ItemNumber":"Number12345",
"UPC":083456789012,
"Cost":"$0.00",
"DealerPrice":" $0.00 ",
"MSRP":" $0.00 ",
}
JSON을 업데이트하려면0
부터"UPC":083456789012,
또는 로 변환합니다."UPC":"083456789012",
유효하게 됩니다.
JSON이 정말로 다음 문자로 시작하는 정수를 받아들이지 않을 수 있습니까?0
아니면 문제를 해결할 방법이 있을까요?
선두 0은 JavaScript의 8진수를 나타냅니다.8진수에는 8을 포함할 수 없습니다.따라서 이 숫자는 유효하지 않습니다.게다가 JSON은 (공식적으로) 8진수를 지원하지 않기 때문에 8이 포함되지 않더라도 정식으로 JSON은 무효입니다.일부 파서들은 이를 지원하므로 혼란이 생길 수 있습니다.다른 파서는 잘못된 시퀀스로 인식하고 오류를 발생시킵니다. 단, 정확한 설명은 다를 수 있습니다.
솔루션:번호가 있으면 절대 선두에 0을 붙여 저장하지 마십시오.선행 0이 필요한 값이 있는 경우 숫자로 처리하지 말고 문자열로 처리하십시오.따옴표와 함께 보관하세요.
이 경우 UPC의 길이는 12자리여야 하며 선행 0이 포함될 수 있습니다.보관 방법은 끈으로 하는 것이 가장 좋다고 생각합니다.
하지만 그것은 논쟁의 여지가 있다.바코드로 취급하고 선행 0을 바코드의 일부로 간주하면 문자열이 의미가 있습니다.다른 유형의 바코드에는 알파벳 문자도 포함될 수 있습니다.
반면에.UPC는 숫자이며, 0에서 12자리까지 왼쪽 패드로 채워진 것은 디스플레이 속성으로 볼 수 있습니다.사실, 0을 더해서 13자리 숫자에 좌표를 붙이면 EAN 코드가 생성됩니다. EAN은 UPC의 슈퍼셋이기 때문입니다.
금액이 있는 경우 다음과 같이 표시할 수 있습니다.€ 7.30
로서 보존하는 동안7.3
따라서 제품 코드를 번호로 저장하는 것도 의미가 있습니다.
하지만 그 결정은 너에게 달렸어.이 코드들에 대한 제 개인적인 취향인 문자열을 사용하라는 조언만 드릴 수 있습니다. 만약 번호를 선택하신다면,0
할 수 있을 것 같아요
JavaScript의 더 혼란스러운 부분 중 하나는 숫자가 다음 문자로 시작하는 경우0
바로 뒤이어가 아니라,.
는 소수점이 아닌 8진수를 나타냅니다.
JSON은 JavaScript 구문을 차용하지만 혼동을 피하기 위해 선행 0이 있는 숫자를 단순히 금지합니다(그 후가 아닌 경우)..
」를 참조해 주세요.
그렇지 않다고 해도, 그 일이 일어날 거라고는 생각하지 않습니다.0
그 이후 파싱될 때 아직 숫자에 남아 있다02
그리고.2
는 같은 숫자의 차이 표현일 뿐입니다(강제적으로 10진수를 사용하는 경우).
선행 0이 데이터에 중요한 경우 숫자가 아닌 문자열이 있을 수 있습니다.
"UPC":"083456789012"
제품 코드는 식별자이지 계산을 할 때 사용하는 것이 아닙니다.스트링일 거예요.
형식적으로는 JSON이DecimalIntegerLiteral
그 안에JSONNumber
실가동:
JSONNumber ::
-_opt DecimalIntegerLiteral JSONFraction_opt ExponentPart_opt
그리고.DecimalIntegerLiteral
로만 시작할 수 있다0
그렇다면0
:
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
그 배경은 다음과 같습니다.
- JSON 문법 - 메인 ECMAScript 문법의 구문을 재사용합니다.
- 주요 ECMAScript 문법 - 쉽게 구분할 수 있도록 하기 위해
DecimalIntegerLiteral
부터HexIntegerLiteral
그리고.OctalIntegerLiteral
.OctalIntegerLiteral
애초에.
다음 제품 참조:
HexIntegerLiteral ::
0x HexDigit
0X HexDigit
HexIntegerLiteral HexDigit
...
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
UPC는 문자열 형식이어야 합니다.향후 GS128이나 문자열 기반의 제품 식별 코드 등 다른 유형의 UPC도 취득할 수 있습니다.DB 열을 문자열로 설정합니다.
정수가 로 시작하는 경우0
JavaScript에서는 10진수(base 10) 값이 아닌 정수의 Octal(base 8) 값으로 간주됩니다.예를 들어 다음과 같습니다.
var a = 065; //Octal Value
var b = 53; //Decimal Value
a == b; //true
번호를 JSON으로 보내는 가장 쉬운 방법은 번호를 문자열로 보내는 것이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/27361565/why-is-json-invalid-if-an-integer-begins-with-a-leading-zero
'sourcecode' 카테고리의 다른 글
wp-content에 대한 파일 권한을 docker-compose용 공식 워드프레스 이미지로 수정하는 방법 (0) | 2023.04.03 |
---|---|
AngularJS : 공장 대신 서비스를 사용하는 경우 (0) | 2023.04.03 |
이 "주의: 요청이 아직 크롬으로 완료되지 않았습니다"를 해결하는 방법 (0) | 2023.04.03 |
Swift에서 두 개의 사전 인스턴스를 결합하려면 어떻게 해야 합니까? (0) | 2023.04.03 |
react.js & redux에서 componentDisMount가 여러 번 호출된 이유는 무엇입니까? (0) | 2023.04.03 |