如何在MacOS / Linux上访问包含句点名称的JSON属性的值?
例如,我有一个JSON对象,其根属性名称包含句点。例如:
{
"foo.bar": {
"one": 1,
"two": "2",
"three": {
"a": "3a",
"b": "3b"
}
}
}
在jqplay.org上,过滤器."foo.bar"
成功提取了该属性的值:
{
"one": 1,
"two": "2",
"three": {
"a": "3a",
"b": "3b"
}
}
但是,在MacOS和Linux(jq v1.5)上,相同的输入和过滤器(即jq ."foo.bar" file.json
不会产生输出。
如果我在过滤器中添加括号(即.["foo.bar"]
),我会得到以下内容:
{
"foo.bar": {
"one": 1,
"two": "2",
"three": {
"a": "3a",
"b": "3b"
}
}
}
{
"one": 1,
"two": "2",
"three": {
"a": "3a",
"b": "3b"
}
}
1
"2"
{
"a": "3a",
"b": "3b"
}
"3a"
"3b"
如何在MacOS / Linux上复制jqplay.org中的行为,以便我可以访问名称中包含句点的属性?
答案 0 :(得分:2)
好的,想通了......我需要用单引号包装整个过滤器:
jq '."foo.bar"' file.json
答案 1 :(得分:0)
在命令行中,您需要转义引号或将过滤器括在单引号中。否则,shell认为引号是将它们包含的字符串作为单个单词。
假设您的JSON存储在文件input.json
中,命令行应该是:
cat input.json | jq .\"foo.bar\"
或:
cat input.json | jq '."foo.bar"'
对于这个简单的过滤器,我建议使用第二种方法(将过滤器括在撇号中),因为它更容易阅读和理解。