Неможливо отримати доступ до власності 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.
Майк Брант

1
Utilities.jsonParseне говорить багато.
Дарин Димитров

Відповіді:


278

jsonObj.profile-idє виразом віднімання (тобто jsonObj.profile - id).

Щоб отримати доступ до ключа, який містить символи, які не можуть з’явитися в ідентифікаторі, використовуйте дужки:

jsonObj["profile-id"]

2
Дякую! Для довідок: Він також працює з кутовим: {{jsonObj.attributes ["profile-id"]}}
BastienSander

3
коли це працює в JavaScript та його вбудованій реалізації, щоб отримати доступ до об'єктного ключа по рядку, переконайтеся, що він працює у всьому зверху
John Smith

1
Також працює для об'єкта JS "style"! @SLaks Я екстраполював це рішення з використанням об’єкта стилю JavaScript для встановлення властивості "box-shadow". document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";працює чудово!
Ерік Хепперл - CodeSlayer2010

2
@ EricHepperle-CodeSlayer2010: style.boxShadowзамість цього слід використовувати . В styleоб'єкті новонавернених дефісів верблюжий.
SLaks

Солодке! Дякую ... Мені подобається кейс верблюда, спосіб краще, тому що менше символів набирати. Перевірено це працює !!
Ерік Хепперл - CodeSlayer2010

3

На додаток до цієї відповіді , зауважте, що в Node.js, якщо ви отримуєте доступ до JSON з синтаксисом масиву, []всі вкладені ключі JSON повинні слідувати цьому синтаксису

Це неправильний шлях

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

і дасть вам помилку "не визначено".

Це правильний шлях

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

Чому це питання? Кулаковий спосіб виглядає абсолютно нормально. Це помилка в мові?
Нікола Дікліч

Якщо ви хочете піти з цим методом. Подумайте про використання такої функціональної утиліти, як ramdajs.com/docs/#path
Amrit Pal Singh

2

Для відповідальних та використання дефісів це працювало для мене:

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.