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

IT技术 javascript json
2021-02-03 21:24:53

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

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

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

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

4个回答

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

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

jsonObj["profile-id"]
甜的!谢谢...我喜欢驼峰式大小写,方法更好,因为要输入的字符更少。验证有效!!
2021-03-15 21:24:53
@EricHepperle-CodeSlayer2010:您应该style.boxShadow改用。style对象将连字符转换为驼峰式大小写。
2021-03-20 21:24:53
当这适用于 javascript 及其通过字符串访问对象属性键的本机实现时,请确保它适用于顶部的所有内容
2021-03-22 21:24:53
也适用于 JS“样式”对象!@SLaks 我将此解决方案推断为使用 JavaScript 样式对象设置“box-shadow”属性。document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";效果很好!
2021-03-27 21:24:53
谢谢!有关信息:它也适用于角度:{{ jsonObj.attributes["profile-id"] }}
2021-04-08 21:24:53

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

这是错误的方法

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

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

这是正确的方法

json['first']['second']['third']['comment'] 
为什么这是一个问题?拳头方式看起来完全正常。这是语言中的错误吗?
2021-03-27 21:24:53
如果你想用这个方法。考虑使用像ramdajs.com/docs/#path这样的功能实用程序
2021-03-28 21:24:53

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

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

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

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