Невозможно получить доступ к свойству 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"]'

Это сработало для меня.

Другие вопросы по тегам