JSON 키 이름에서 어떤 문자가 유효 / 무효입니까?


151

JavaScript 객체 또는 JSON 문자열에 대해 키 이름에 금지 된 문자가 있습니까? 아니면 탈출해야 할 캐릭터?

보다 구체적으로, 키 이름에 "$", "-"및 공백을 사용하고 싶습니다.


나는이 답변이 인코딩하는 방식과 부분적으로 관련이 있다고 생각합니다. 예를 들어 UTF8에는 ANSI와 다른 문자가 허용됩니다.
invalidsyntax

4
obj['whatever']표기법을 사용하여 JS에서 원하는 '키'를 사용할 수 있습니다 . 그러나 obj.whatever버전 에는 일반 영숫자 키만 사용할 수 있습니다 .
Marc B

4
@invalidsyntax : JSON은 정의에 따라 유니 코드입니다. 또한 ANSI는 인코딩이 아니며 문자 세트이므로 UTF-8-ANSI가 아닌 Unicode-vs-ANSI 여야합니다.
Marcelo Cantos

1
오래된 토론이지만 ASCII (사람들이 ANSI에서 종종 참조하는 것)는 인코딩이며 그 외에도 문자 세트를 정의합니다.
트리니다드

답변:


167

아니요. 유효한 문자열은 유효한 키입니다. "당신이 탈출하는 한 그것을 가질 수도 있습니다 .

{"The \"meaning\" of life":42}

키를 객체 필드 이름과 연결하려는 일부 언어로 이러한 값을로드하는 데 어려움이있을 수 있습니다. 그러나 나는 그런 경우를 모른다.


고마워! 탈출해야 할 다른 캐릭터가 있습니까? 좋아요 : 또는; ?
Christophe

11
그거 아니야 JavaScript에서 탈출해야하는 것은 일반적으로 JSON에서 필요합니다. 그러나 json.org에서 말의 입에서 얻는 것이 가장 좋습니다. 전체 사양을 전체적으로 읽는 데 약 1 분이 걸립니다.
Marcelo Cantos

3
이것은 좋은 대답이 아닙니다. 어떤 종류의 캐릭터를 이스케이프해야합니까? 어떤 문자를 이스케이프 할 수 있지만 이스케이프 할 필요는 없습니까?
Daniel W.

유니 코드 null 문자 (U + 0000, UTF-8의 일반 "null byte") 등과 같은 것이 포함되어 있는지 누구든지 확인할 수 있습니까? 양쪽 json.org 및 링크 된 공식 / 형식 ECMA 사양 PDF는 (다만에서도 그대로의 형태로, 사람들은 JSON에 유효하며, 그 예를 의미하는 것 같다 \u four-hex-digits양식).
mtraceur 2016 년

1
@OutofOrbit 형식화되지 않은 객체에로드 할 수 있습니까?
Marcelo Cantos

54

문제를 피하려면 JSON 데이터에서 다음 문자를 이스케이프해야합니다

작은 따옴표

" 인용문

백 슬래시

\ n \ t와 같은 모든 제어 문자

JSON 파서JSON 을 다루는 데 도움을 줄 수 있습니다.

편집 : OP의 링크가 죽었으므로 대체 JSON 파서가 있습니다.


5
안녕 아룬, 작은 따옴표는 이스케이프 할 필요가 없습니다. 실제로 이스케이프 처리하면 엄격한 JSON 파서가 예외를 발생시킵니다. json.org 의 문자열 섹션을 참조하십시오. 물론 JSON 문자열 (단, JSON 자체는 아님) 안에있을 때 탈출해야합니다.
Alex KeySmith

5
@AlexKey 당신이 완전히 맞아요! Arun, jsonlint.com 에서 JSON { "singlequotetest": "something here isn\'t right"}{ "singlequotetest": "Fixing here what wasn't right"}
Adrien의

@Arun Rana-걱정할 필요가 없습니다.
Alex KeySmith

3
{ "* ~ @ # $ % ^ & * () _ + => <? /": "유효한 JSON입니다"}
Abhi

45
{"🐶🔫": "not nice, but still valid json"}
Marcelo Cantos

12

숫자로 키를 시작하는 것이 유효하지만 의도하지 않은 문제가 발생할 수 있습니다.

예:

var testObject = {
    "1tile": "test value"
};
console.log(testObject.1tile); // fails, invalid syntax
console.log(testObject["1tile"]; // workaround

6
저는 2017/18 세의 Microsoft 시대에 그들이 겪은 모든 고통에 대해 유감스럽게 생각합니다.
monsto

1
메트릭 ID 매개 변수를 살펴보십시오. dev.applicationinsights.io/apiexplorer/… --- 15 또는 20 개의 필드에는 json 필드 이름에 여러 개의 슬래시가 있습니다. Karns 솔루션은 특정 필드에서 작동하지만 1tile의 하위 필드에서는 작동하지 않는 것 같습니다. 예를 들어, 후속 점은 정의되지 않은 상태로 반환됩니다.
Jon Luzader

IE가 언급 된 이유는 무엇입니까? 숫자로 시작하는 식별자는 모든 ECMAScript 구현에서 불법입니다.
m93a

@ m93a IE는 Internet Explorer의 약어가 아닙니다 ... 잘못된 단어 선택 : /
karns

이것이 가장 좋은 답변이어야합니다
Joe Elia

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.