[英]How to parse JSON into a single nested object with jq?
我正在嘗試使用 jq 解析 JSON 文件,但我無法正確解析。 如何將以下 JSON 解析為:
name
的值作為對象的鍵?(源 json 的縮短版本):
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "Uppsala domkyrka"
},
"geometry": {
"coordinates": [
17.6336159,
59.8581466
]
}
},
{
"type": "Feature",
"properties": {
"name": "Uppsala moské"
},
"geometry": {
"coordinates": [
17.6382165,
59.874003
]
}
}
]
}
我正在嘗試將其解析為這種格式:
{
"cities": {
"uppsala": {
"locations": {
"Uppsala domkyrka": {
"name": "Uppsala domkyrka",
"coordinates": {
"_latitude": 59.854,
"_longitude": 17.6261
}
},
"Uppsala moské": {
"name": "Uppsala moské",
"coordinates": {
"_latitude": 59.8581,
"_longitude": 17.6336
}
}
}
}
}
}
這是我到目前為止到達的命令:
[.features[] | {name: .properties.name, coordinates: {_latitude: .geometry.coordinates[0], _longitude: .geometry.coordinates[1]}}]
要產生這個,這是不太正確的:
[
{
"name": "Uppsala domkyrka",
"coordinates": {
"_latitude": 17.6336159,
"_longitude": 59.8581466
}
},
{
"name": "Uppsala moské",
"coordinates": {
"_latitude": 17.6382165,
"_longitude": 59.874003
}
}
]
我還沒有設法將name
的值作為對象的鍵。
有任何想法嗎? 我已經讀了幾個小時,然后把頭發拉出來。。
由於您想對三個最頂層的鍵進行硬編碼,因此解決方案的關鍵是add
:
{
"cities": {
"uppsala": {
"locations":
[.features[]
| {name: .properties.name,
coordinates:
{_latitude: .geometry.coordinates[0],
_longitude: .geometry.coordinates[1]
}
}
| {(.name): .}
] | add
}
}
}
如果您不想要name
的冗余,您可以將{(.name): .}
替換為:
{(.name): del(.name)}
上面的關鍵add
有點丟失,所以你可能想考慮這個等效的替代方案:
[.features[]
| {name: .properties.name,
coordinates:
{ _latitude: .geometry.coordinates[0],
_longitude: .geometry.coordinates[1]
}
} | {(.name): .} ]
| add as $v
| ({} | .cities.uppsala.locations = $v)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.