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

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

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

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

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

135759 次浏览

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

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

jsonObj["profile-id"]

对于可能性,并使用连字符,这对我很有用:

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

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

走错路了

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

将会给你一个“未定义”的错误。

这是正确的方法

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

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

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

如果您在 Linux 中,尝试使用以下模板打印包含破折号’-’的 JSON 值

jq '.["value-with-dash"]'

这招对我很管用。