"-"대시를 사용하여 JSON 속성에 액세스 할 수 없습니다.


127

문자열에 대시 문자가있는 경우 json 개체에서 값을 검색 할 수 없습니다.

{
"profile-id":1234, "user_id":6789
}

파싱 ​​된 jsonObj.profile-id것을 참조하려고 하면 반환 ReferenceError: "id" is not defined되지만 jsonObj.user_id는 6789를 반환합니다.

외부 API 호출에 의해 반환되는 값을 수정하고 대시를 제거하기 위해 반환 된 문자열을 구문 분석하는 방법은 전달되는 URL 등을 망칠 수 있습니다. 도움?


3
JSON을 구문 분석하는 데 사용하려는 언어 / 파서에 대한 정보를 추가하면 도움이 될 수 있습니다.
Mike Brant 2012

1
Utilities.jsonParse많이 말하지 않습니다.
Darin Dimitrov

답변:


278

jsonObj.profile-id빼기 표현식 (예 :) jsonObj.profile - id입니다.

식별자에 나타날 수없는 문자가 포함 된 키에 액세스하려면 대괄호를 사용하십시오.

jsonObj["profile-id"]

2
감사! 정보 : 또한 각도와 함께 작동합니다 : {{jsonObj.attributes [ "profile-id"]}}
BastienSander

3
자바 스크립트에서이 작품의 기본 구현은 문자열에 의해 객체 속성 키에 액세스 할 때, 반드시 그것을 위에 모든 작동합니다
존 스미스

1
JS "스타일"객체에서도 작동합니다! @SLaks이 솔루션을 "box-shadow"속성을 설정하기 위해 JavaScript 스타일 개체를 사용하는 것으로 추정했습니다. document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";잘 작동합니다!
Eric Hepperle-CodeSlayer2010 2016 년

2
@ EricHepperle-CodeSlayer2010 : style.boxShadow대신 사용해야 합니다. style객체 변환은 낙타 표기법에 하이픈.
SLaks

단! 고마워요 ... 저는 카멜 케이스를 좋아합니다. 입력 할 문자가 적기 때문에 방법이 더 좋습니다. 작동하는지 확인했습니다 !!
Eric Hepperle-CodeSlayer2010 2016 년

3

이 답변 외에도 Node.js에서 배열 구문으로 JSON에 액세스하는 경우 []중첩 된 모든 JSON 키는 해당 구문을 따라야합니다.

이것은 잘못된 방법입니다

json.first.second.third['comment']

'정의되지 않은'오류가 발생합니다.

이것이 올바른 방법입니다

json['first']['second']['third']['comment'] 

이것이 왜 문제입니까? 첫 번째 방법은 완전히 정상으로 보입니다. 이 언어의 버그입니까?
니콜라 Diklic

이 방법으로 가고 싶다면. ramdajs.com/docs/#path
Amrit Pal Singh

2

ansible과 하이픈을 사용하면 이것은 나를 위해 일했습니다.

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.