我有一个包含以下内容的 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)
上面的命令全部返回三个消息。我想问一下如何只提取第一条消息或一条一条消息。
您的输入文件包含多个 JSON 对象。用于-s将它们全部读入单个数组,否则jq将它们一一处理。然后,您可以通过指定其索引来打印第一个:
jq -cs '.[0]'
Run Code Online (Sandbox Code Playgroud)
假设您想要第一个具有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)
| 归档时间: |
|
| 查看次数: |
23006 次 |
| 最近记录: |