Arrays 如何使用jq从JSON数组中提取特定字段
我想使用jq处理JSON数据。以下是数据摘录:Arrays 如何使用jq从JSON数组中提取特定字段,arrays,select,jq,Arrays,Select,Jq,我想使用jq处理JSON数据。以下是数据摘录: { "lat": "49.3877286", "lon": "6.704062", "tag": [ { "k": "name", "v": "Beckingen" }, { "k": "is_in", "v": "Merzig-Wadern,Saarland,Bundesrepublik Deutschland,Europe" }, {
{
"lat": "49.3877286",
"lon": "6.704062",
"tag": [
{
"k": "name",
"v": "Beckingen"
},
{
"k": "is_in",
"v": "Merzig-Wadern,Saarland,Bundesrepublik Deutschland,Europe"
},
{
"k": "place",
"v": "town"
},
]
}
{
"lat": "49.287307",
"lon": "6.8827786",
"tag": [
{
"k": "name",
"v": "Püttlingen"
},
{
"k": "place",
"v": "town"
},
{
"k": "population",
"v": "18748"
}
]
}
我需要提取lat
、lon
和name
字段,如下所示:
{
"lat": "49.3877286",
"lon": "6.704062",
"name": "Beckingen"
},
{
"lat": "49.287307",
"lon": "6.8827786",
"name": "Püttlingen"
}
我就快到了,但我不知道如何使用select()
从数组中选择字段。谁能给我指出正确的方向吗
非常感谢,
Enno根据您的具体要求,您可以使用
映射(选择(…)
或[]|选择(…)
,例如:
.tag[] | select(.k == "name") | .v
您可能希望使其更加健壮,例如,考虑到可能没有一个“名称”:
根据您的具体要求,您可以使用
map(选择(…)
或[]|选择(…)
,例如:
.tag[] | select(.k == "name") | .v
您可能希望使其更加健壮,例如,考虑到可能没有一个“名称”:
好的,我明白了:
{lat: .lat, lon: .lon, tag: .tag[]}
| select(.tag.k=="name")
| {lat: .lat, lon: .lon, name: .tag.v}
诀窍是使用.tag[]
将每个条目乘以.tag
中的数组元素数,然后选择相关条目,然后构造输出JSON。谢谢你的提示,@peak 好的,我明白了:
{lat: .lat, lon: .lon, tag: .tag[]}
| select(.tag.k=="name")
| {lat: .lat, lon: .lon, name: .tag.v}
诀窍是使用
.tag[]
将每个条目乘以.tag
中的数组元素数,然后选择相关条目,然后构造输出JSON。谢谢你的提示,@peak 您可以将其简化为{lat,long,name:(.tag[]| select(.k==“name”)|.v)}很酷,谢谢!为了完成:在这个特殊的例子中,它是lon
,而不是long
。您可以将它简化为{lat,long,name:(.tag[]| select(.k==“name”)|.v)}很酷,谢谢!为了完成:在这种特殊情况下,它是lon
,而不是long
。