Невозможно получить доступ к свойству JSON с "-" тире
Я не могу получить значение из объекта json, когда строка имеет символ тире:
{
"profile-id":1234, "user_id":6789
}
Если я попытаюсь ссылаться на проанализированный jsonObj.profile-id
это возвращается ReferenceError: "id" is not defined
но jsonObj.user_id вернет 6789
У меня нет способа изменить значения, возвращаемые внешним вызовом API, и попытаться проанализировать возвращенную строку, чтобы удалить дефисы, разрушит URL и т. Д., Которые также передаются. Помогите?
5 ответов
jsonObj.profile-id
является выражением вычитания (т.е. jsonObj.profile - id
).
Чтобы получить доступ к ключу, который содержит символы, которые не могут появляться в идентификаторе, используйте скобки:
jsonObj["profile-id"]
В дополнение к этому ответу обратите внимание, что в Node.js, если вы обращаетесь к JSON с синтаксисом массива[]
все вложенные ключи JSON должны соответствовать этому синтаксису
Это неправильный путь
json.first.second.third['comment']
и выдаст вам ошибку undefined.
Это правильный путь
json['first']['second']['third']['comment']
Для ansible и использования дефиса это сработало для меня:
- name: free-ud-ssd-space-in-percent
debug:
var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
Любой, кто пытается применить это решение к шаблонам значений HomeAssistant, должен использовать одинарные кавычки, поскольку они вложены:
value_template: "{{value_json['интернет-компьютер'].usd}}"
Если вы работаете в Linux, попробуйте использовать следующий шаблон для печати значения JSON, которое содержит дефисы «-»
jq '.["value-with-dash"]'
Это сработало для меня.