我正在尝试使用 windows cmder.exe (或标准命令提示符)为命令行 JSON 处理器执行 jq 命令来转换和输出我保存的现有 JSON 文件。我已经成功返回数据,但现在我很好奇为什么没有逗号分隔匹配的记录。
给出示例 json
[
{
"name": "Bob",
"location": "New York"
},
{
"name": "Adam",
"location": "Los Angeles"
},
{
"name": "Jill",
"location": "Chicago"
}
]
当我检索纽约和洛杉矶位置的匹配项时..
jq ".[] | select((.location == \"New York\") or select(.location == \"Los Angeles\"))" sample.json
我看到输出:
{
"name": "Bob",
"location": "New York"
}
{
"name": "Adam",
"location": "Los Angeles"
}
我的目标可以根据我的需要互换,要么(a)通过命令行显示结果,要么(b)输出到新文件,例如
jq ".[] | select((.location == \"New York\") or select(.location == \"Los Angeles\"))" sample.json > newsample.json
所以我需要修复才能看到下面的预期外观,而不需要物理更改原始的sample.json 文件:
{
"name": "Bob",
"location": "New York"
},
{
"name": "Adam",
"location": "Los Angeles"
}
或者如果可能的话甚至是这个
[
{
"name": "Bob",
"location": "New York"
},
{
"name": "Adam",
"location": "Los Angeles"
}
]
.[]
迭代数组的元素并返回 JSON 实体流。您无法获取 JSON 实体流并声明其有效 JSON:{"a":1},{"b":2}
不是有效的 JSON,也不是有效的流。 [{"a":1},{"b":2}]
是包含单个数组的有效 JSON 文档。
如果要返回数组,请使用
map(f)
将过滤器 f
应用于数组中的每个元素。 map(f)
相当于 [.[] | f]
(事实上是这样实现的)。
map(select(.location == "New York" or .location == "Los Angeles"))