如何让 JQ 在输出中的匹配记录之间保留逗号分隔

问题描述 投票:0回答:1

我正在尝试使用 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 windows jq cmder
1个回答
0
投票

.[]
迭代数组的元素并返回 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"))
© www.soinside.com 2019 - 2024. All rights reserved.