programing

JSON 키에 따옴표로 묶인 문자열을 사용해야 하는 실질적인 이유가 있습니까?

lovejava 2023. 3. 10. 20:58

JSON 키에 따옴표로 묶인 문자열을 사용해야 하는 실질적인 이유가 있습니까?

Crockford의 json.org에 따르면 JSON 오브젝트는 멤버로 구성되며 멤버는 쌍으로 구성됩니다.

각 쌍은 문자열으로 구성되며 문자열은 다음과 같이 정의됩니다.

문자열은 백슬래시 이스케이프를 사용하여 큰따옴표로 둘러싸인 0자 이상의 Unicode 문자 시퀀스입니다.문자는 단일 문자열로 표시됩니다.문자열은 C 또는 Java 문자열과 매우 유사합니다.

그러나 대부분의 브라우저는 큰따옴표를 사용할 필요가 없기 때문에 실제로는 대부분의 프로그래머는 JSON 키가 큰따옴표로 둘러싸여 있어야 한다는 사실조차 알지 못합니다.

JSON을 큰따옴표로 묶는 것이 말이 됩니까?

유효한 예:

{
  "keyName" : 34
}

환자와는 대조적으로:

{
   keyName : 34
}

JSON 키가 따옴표로 둘러싸야 하는 진짜 이유는 ECMAScript 3의 식별자 의미에 의존합니다.

예약된 단어는 따옴표 없이 개체 리터럴에서 속성 이름으로 사용할 수 없습니다. 예를 들어 다음과 같습니다.

({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...

따옴표를 사용하는 경우 속성 이름은 유효합니다.

({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok

강연에서 Crockford는 JSON 표준을 단순하게 유지하기를 원하며 JSON에 대해 의미적 제한을 가하고 싶지 않다고 설명합니다.

....

그때 우리는 따옴표가 없는 이름의 문제를 발견했다.ECMA Script 3에는 sk reserved word 정책이 있는 것으로 나타났습니다.중요한 위치에 격언은 반드시 인용해야 하는데, 이것은 정말 귀찮은 일이다.이것을 표준으로 만들었을 때, 나는 모든 예약어를 표준 안에 넣고 싶지 않았다. 왜냐하면 그것은 정말 바보같이 보일 것이기 때문이다.

당시 저는 사람들을 설득하려고 했습니다.응, 어플리케이션은 JavaScript로 쓸 수 있어.실제로 동작할 수 있고, 좋은 언어라고.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 그래서 대신 열쇠를 인용하기로 했어요
그렇게 하면, 우리는 그것이 얼마나 큰지 아무에게도 말할 필요가 없다.

그래서 오늘날까지 JSON에서 키가 인용되고 있습니다.

...

에서는 이를 ES5(ECMAScript 5th Edition Standard) 따옴표 할 수 .현재 ES5 실장에서는 오브젝트 리터럴과 멤버액세스 양쪽에서 예약어조차 따옴표 없이 사용할 수 있습니다(obj.functionES5에서 OK).

참고로 이 표준은 현재 소프트웨어 벤더에 의해 구현되고 있습니다.이 호환성 테이블에는 어떤 브라우저가 이 기능을 포함하고 있는지 확인할 수 있습니다(속성명으로 예약어 참조).

예, 유효하지 않은 JSON이며 그렇지 않으면 대부분의 경우 거부됩니다. 예를 들어 jQuery 1.4+에는 따옴표가 없는 JSON이 자동으로 실패하도록 하는 체크가 있습니다. 순응하지 않는가?

다른 예를 들어 보겠습니다.

{ myKey: "value" }
{ my-Key: "value" }
{ my-Key[]: "value" }

...이 모든 것은 견적을 통해 유효합니다.왜 일관성을 유지하면서 모든 경우에 사용하여 문제가 발생할 가능성을 배제하지 않습니까?

웹 개발자 세계에서 또 하나의 일반적인 예가 있습니다.대부분의 브라우저에서 렌더링하는 잘못된 HTML의 예는 수천 가지가 있습니다.디버깅이나 유지보수의 번거로움이 적습니까?전혀 그렇지 않아요, 정반대죠.

또한 @Matthew는 아래의 코멘트에서 가장 좋은 점을 지적하고 있습니다.이것은 이미 실패합니다.따옴표로 둘러싸이지 않은 키는 모든 메이저브라우저(및 그것을 올바르게 실장하고 있는 다른 브라우저)에서 구문 오류를 발생시킵니다.여기서 테스트해 주세요.

표준을 올바르게 이해하면 JSON이 말하는 오브젝트(objects)는 실제로는 실제 오브젝트(dictionary)보다 맵(dictionary)에 훨씬 가깝습니다.현행 표준은 모든 유형의 키를 허용하는 확장을 쉽게 수용하여

{
    "1" : 31.0,
      1 : 17,
     1n : "valueForBigInt1"
}

3가지 요소로 구성된 유효한 "객체/지도"입니다.

만약 이것이 아니었다면, 디자이너는 모든 케이스(키워드 제외)에 대해 키 주위에 따옴표를 붙였을 것이라고 생각합니다.

실제로 JSON의 슈퍼셋인 YAML은 사용자가 원하는 작업을 지원합니다.슈퍼셋이지만 원하는 만큼 심플하게 유지할 수 있습니다.

YAML은 신선한 공기를 마시는 곳이기 때문에 한번 봐 볼 가치가 있을 것 같습니다.시작하기에 가장 좋은 장소는 http://en.wikipedia.org/wiki/YAML입니다.

JS를 포함한 지구상의 모든 언어에는 libs가 있습니다(예: https://github.com/nodeca/js-yaml).

언급URL : https://stackoverflow.com/questions/4201441/is-there-any-practical-reason-to-use-quoted-strings-for-json-keys