如何使用 jq 提取 json 文件上的第一个字段/值

Fra*_*sis 8 json jq

我有一个包含以下内容的 JSON 文件:

{
  "Message": {
    "greeting": "hello"
  }
}
{
  "Message": {
    "greeting": "Bonjour"
  }
}
{
  "Message": {
    "greeting": "Konnichiwa"
  }
}
Run Code Online (Sandbox Code Playgroud)

我只想提取第一条包含"greeting" : "hello". 我似乎无法使用它的索引

cat "$file" | jq -c "."
Run Code Online (Sandbox Code Playgroud)

上面的命令全部返回三个消息。我想问一下如何只提取第一条消息或一条一条消息。

cho*_*oba 9

您的输入文件包含多个 JSON 对象。用于-s将它们全部读入单个数组,否则jq将它们一一处理。然后,您可以通过指定其索引来打印第一个:

jq -cs '.[0]' 
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

假设您想要第一个具有greeting与 value 对应的键的JSON 对象hello,具体来说,不仅仅是第一个 JSON 对象。

jq -s 'map(select(.Message.greeting == "hello")) | first' file.json
Run Code Online (Sandbox Code Playgroud)

这将使用( )将 JSON 对象读取file.json到数组中。然后过滤该数组以查找包含带有value 的键的任何对象。返回这些对象中的第一个。-s--surp.Message.greetinghello

通过修改后的示例文档,

{
  "Message": {
    "greeting": "Konnichiwa"
  }
}
{
  "Message": {
    "greeting": "hello",
    "id": 1
  }
}
{
  "Message": {
    "greeting": "hello",
    "id": 2
  }
}
{
  "Message": {
    "greeting": "Bonjour"
  }
}
Run Code Online (Sandbox Code Playgroud)

添加键id只是为了区分两个相同的对象,该jq命令返回

{
  "Message": {
    "greeting": "hello",
    "id": 1
  }
}
Run Code Online (Sandbox Code Playgroud)