【问题标题】:Unable to access JSON property with "-" dash无法使用“-”破折号访问 JSON 属性
【发布时间】:2012-12-01 22:05:06
【问题描述】:

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

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

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

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

【问题讨论】:

标签: javascript json


【解决方案1】:

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

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

jsonObj["profile-id"]

【讨论】:

  • 谢谢!有关信息:它也适用于角度:{{ jsonObj.attributes["profile-id"] }}
  • 当它在 javascript 及其原生实现中通过字符串访问对象属性键时,确保它在顶部的所有内容中都可以工作
  • 也适用于 JS "style" 对象! @SLaks 我将此解决方案推断为使用 JavaScript 样式对象设置“box-shadow”属性。 document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161"; 效果很好!
  • @EricHepperle-CodeSlayer2010:您应该改用style.boxShadowstyle 对象将连字符转换为驼峰式。
  • 甜蜜!谢谢...我喜欢骆驼案,方法更好,因为要输入的字符更少。已验证有效!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    这是错误的方式

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

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

    这是正确的方法

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

    【讨论】:

    • 为什么会出现这个问题?拳法看起来完全正常。这是语言中的错误吗?
    • 如果你想用这个方法。考虑使用类似ramdajs.com/docs/#path 的功能实用程序
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多