如何使用jq将JSON解析为单个嵌套对象?
我试图用jq解析一个JSON文件,但我不能正确地解析它。如何将以下JSON解析为:如何使用jq将JSON解析为单个嵌套对象?,json,jq,Json,Jq,我试图用jq解析一个JSON文件,但我不能正确地解析它。如何将以下JSON解析为: 单个嵌套对象,并添加其他顶级关键点(“示例中的城市”、“乌普萨拉”和“位置”) 是否将键名称的值用作对象的键 (源json的缩写版本): 我正在尝试将其解析为这种格式: { "cities": { "uppsala": { "locations": { "Uppsala domkyrka": { "name": "Uppsala domkyrka",
- 单个嵌套对象,并添加其他顶级关键点(“示例中的城市”、“乌普萨拉”和“位置”)
- 是否将键
名称
的值用作对象的键
{
"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
的值作为对象的键
有什么想法吗?我已经读了好几个小时了,真是毛骨悚然。既然您想硬编码最上面的三个键,解决方案的关键是添加:
{
"cities": {
"uppsala": {
"locations":
[.features[]
| {name: .properties.name,
coordinates:
{_latitude: .geometry.coordinates[0],
_longitude: .geometry.coordinates[1]
}
}
| {(.name): .}
] | add
}
}
}
如果您不想重复名称
,可以将{(.name):.}
替换为:
{(.name): del(.name)}
更紧凑的变体
“临界<代码>添加< /代码>在上面丢失了一点,所以您可能想考虑这个等价的替代方案:
[.features[]
| {name: .properties.name,
coordinates:
{ _latitude: .geometry.coordinates[0],
_longitude: .geometry.coordinates[1]
}
} | {(.name): .} ]
| add as $v
| ({} | .cities.uppsala.locations = $v)
您预期的输出不是有效的JSON,您不能有相同名称的重复密钥
ID
,感谢您及时指出@Inian和@peak,这显然是我的误解。我相信这是正确的,现在有意义了吗?
[.features[]
| {name: .properties.name,
coordinates:
{ _latitude: .geometry.coordinates[0],
_longitude: .geometry.coordinates[1]
}
} | {(.name): .} ]
| add as $v
| ({} | .cities.uppsala.locations = $v)