无法使用“ - ”破折号访问JSON属性

时间:2012-12-13 22:28:57

标签: javascript json

当字符串有短划线字符时,我无法从json对象中检索值:

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

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

我没有办法修改外部api调用返回的值,并尝试解析返回的字符串,以便删除破折号,也会破坏传递的URL等。帮助

4 个答案:

答案 0 :(得分:230)

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

要访问包含无法在标识符中出现的字符的密钥,请使用括号:

jsonObj["profile-id"]

答案 1 :(得分:1)

除了this answer之外,请注意,在Node.js中,如果您使用数组语法[]访问JSON,则所有嵌套的JSON密钥都应遵循该语法

这是错误的方式

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

,并且会给您“未定义”错误。

这是正确的方法

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

答案 2 :(得分:1)

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

value_template: "{{ value_json['internet-computer'].usd }}"

答案 3 :(得分:0)

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

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]