gpt4 book ai didi

json - 如何编写 jq 脚本来提取可能显示为单例或列表的元素?

转载 作者:行者123 更新时间:2023-12-04 23:44:51 25 4
gpt4 key购买 nike

如何编写一个 jq 查询来从可能显示为单例或列表的元素中提取属性?

例如,从下面两个示例 JSON 字符串中的创建者提取 URL 属性。

示例 #1:

{
"@type": "example1",
"creator":{
"@type":"Organization",
"url": "https://www.ncei.noaa.gov/"
}
}

示例 #2:

{ 
"@type": "example2",
"creator": [{
"@type":"Person",
"url": "https://www.example.com/homepage"
},
{
"url": "https://www.example.com/another"
}]
}

我试过对第一个使用 .creator ,对第二个使用 .creator[] ,但这两个不兼容。有没有一种方法可以使它适用于这两个示例?

最佳答案

一种非常直接的可能性是简单地测试 .creator 是否为数组:

if .creator|type == "array" then .creator[] else .creator end
| .url

流式解析器

在直截了当的另一端,如果 (a) 输入的 JSON 文档非常庞大,并且 (b) 目标是列出作为直接子项出现的所有 .url 值,则还有另一种可能性.creator,无论键位于输入 JSON 文档中的什么位置。调用将使用 --stream 命令行选项,例如

 jq --stream -f filter.jq input.json

本例中的 jq 过滤器是:

select(length==2 and 
(.[0][-1] == "url") and
last( .[0][:-1][]| strings ) == "creator")
| .[1]

关于json - 如何编写 jq 脚本来提取可能显示为单例或列表的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49064828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com