Невозможно получить доступ к свойству 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не говорит много.
Дарин Димитров

Ответы:


279

jsonObj.profile-idэто выражение вычитания (т.е. jsonObj.profile - id).

Чтобы получить доступ к ключу, который содержит символы, которые не могут присутствовать в идентификаторе, используйте скобки:

jsonObj["profile-id"]

2
Спасибо! Для информации: он также работает с angular: {{jsonObj.attributes ["profile-id"]}}
BastienSander

3
когда это работает в javascript и его собственной реализации для доступа к ключу свойства объекта по строке, убедитесь, что он работает во всем наверху
Джон Смит,

1
Также работает для объекта "стиля" JS! @SLaks Я экстраполировал это решение на использование объекта стиля JavaScript для установки свойства box-shadow. document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";прекрасно работает!
Эрик Хепперле - CodeSlayer2010

2
@ EricHepperle-CodeSlayer2010: вы должны использовать style.boxShadowвместо этого. В styleобъекте новообращенных дефисов верблюжий.
SLaks 05

Сладкий! Спасибо ... Мне нравится случай верблюда, метод лучше, потому что меньше символов для ввода. Проверено работает !!
Эрик Хепперле - CodeSlayer2010

3

В дополнение к этому ответу обратите внимание, что в Node.js, если вы обращаетесь к JSON с синтаксисом массива, []все вложенные ключи JSON должны следовать этому синтаксису

Это неправильный путь

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

и выдаст вам ошибку undefined.

Это правильный путь

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

Почему это проблема? Первый способ выглядит совершенно нормально. Это ошибка языка?
Никола Диклич

Если вы хотите использовать этот метод. Рассмотрите возможность использования функциональной утилиты, такой как ramdajs.com/docs/#path
Амрит Пал Сингх,

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.