我想使用jq处理JSON数据。以下是数据摘录:
{
"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
答案 0 :(得分:1)
根据您的确切要求,您可以使用map(select(...))
或.[] | select(...)
,例如:
.tag[] | select(.k == "name") | .v
您可能希望使其更加健壮,例如,考虑到可能没有确切的一个“名称”的可能性:
first(.tag[] | select(.k == "name") | .v // null)
答案 1 :(得分:0)
好吧,我明白了
{lat: .lat, lon: .lon, tag: .tag[]}
| select(.tag.k=="name")
| {lat: .lat, lon: .lon, name: .tag.v}
诀窍是使用.tag[]
将每个条目与.tag
中的数组元素数量相乘,然后选择相关条目,然后构造输出JSON。感谢提示,@ peak!