如何在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 的行为,以便访问名称中带有句点的属性?
好的,想通了...我需要将整个过滤器包装在单引号中:
jq '."foo.bar"' file.json
在命令行中,您需要转义引号或将过滤器括在单引号中。否则,shell 认为引号的存在是为了将它们括起来的字符串作为单个单词。
假设您的 JSON 存储在文件input.json
中,命令行应如下所示:
cat input.json | jq ."foo.bar"
或:
cat input.json | jq '."foo.bar"'
对于这个简单的过滤器,我建议使用第二种方式(将过滤器括在撇号中(,因为它更容易阅读和理解。