如何编写 jq 脚本来提取可能显示为单例或列表的元素?
How to write jq script to extract elements that might appear as singleton or list?
如何编写一个 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 command-line 选项,例如
jq --stream -f filter.jq input.json
本例中的jq过滤器为:
select(length==2 and
(.[0][-1] == "url") and
last( .[0][:-1][]| strings ) == "creator")
| .[1]
如何编写一个 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 command-line 选项,例如
jq --stream -f filter.jq input.json
本例中的jq过滤器为:
select(length==2 and
(.[0][-1] == "url") and
last( .[0][:-1][]| strings ) == "creator")
| .[1]