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


127

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

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

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

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


3
添加有关您尝试使用哪种语言/解析器解析JSON的信息可能会有所帮助。
Mike Brant 2012年

1
Utilities.jsonParse不多说。
Darin Dimitrov

Answers:


277

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

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

jsonObj["profile-id"]

2
谢谢!有关信息:它也可以与angular一起使用:{{jsonObj.attributes [“ profile-id”]}}
BastienSander 2014年

3
当这在javascript及其本地实现中可以通过字符串访问对象属性键时,请确保它在顶部的所有内容中都有效
john Smith,

1
也适用于JS“样式”对象!@SLaks我将此解决方案推断为使用JavaScript样式对象设置“ box-shadow”属性。document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";很棒!
Eric Hepperle-CodeSlayer2010 '16

2
@ EricHepperle-CodeSlayer2010:您应该style.boxShadow改用。该style对象将连字符转换为camelCase。
SLaks's

甜!谢谢...我喜欢骆驼的情况,因为输入的字符更少,所以方法更好。验证它有效!!
Eric Hepperle-CodeSlayer2010 '16

3

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

这是错误的方式

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

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

这是正确的方法

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

为什么这是一个问题?拳头的样子看起来很正常。这是语言的错误吗?
Nikola Diklic

如果要使用此方法。考虑使用ramdajs.com/docs/#path之
Amrit Pal Singh

2

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

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.