163

当字符串具有破折号字符时,我无法从 json 对象中检索值:

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

如果我尝试引用jsonObj.profile-id它返回的解析ReferenceError: "id" is not defined但 jsonObj.user_id 将返回 6789

我没有办法修改由外部 api 调用返回的值,并试图解析返回的字符串以删除破折号会破坏 url 等,这些也是传递的。帮助?

4

4 回答 4

346

jsonObj.profile-id是减法表达式(即jsonObj.profile - id)。

要访问包含不能出现在标识符中的字符的键,请使用方括号:

jsonObj["profile-id"]
于 2012-12-13T22:31:07.300 回答
3

除了这个答案,请注意,在 Node.js 中,如果您使用数组语法访问 JSON,[]所有嵌套的 JSON 键都应遵循该语法

这是错误的方式

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

并且会给你“未定义”的错误。

这是正确的方法

json['first']['second']['third']['comment'] 
于 2019-09-01T14:48:29.567 回答
1

对于ansible,并使用连字符,这对我有用:

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
于 2018-11-21T11:05:57.040 回答
0

对于任何尝试将公认的解决方案应用于 HomeAssistant 值模板的人,如果您嵌套在双精度中,则必须使用单引号:

value_template: "{{ value_json['internet-computer'].usd }}"
于 2021-07-05T10:14:43.863 回答