所以问题是我有一个JSON,看起来有点像这样:
{
"country": "USA",
"states": [
{
"stateName": "California",
"timeZone": "UTC-8",
"cities": [
{
"cityName": "Los Angeles"
},
{
"cityName": "San Diego"
}
]
},
{
"stateName": "Texas",
"timeZone": "UTC-8",
"cities": [
{
"cityName": "Houston"
},
{
"cityName": "Dallas"
}
]
}
]}
( json只是一个例子,不要当真)
我需要做的是列出所有的城市,但也要从父对象中获取"stateName“字段,并以某种方式将其放入城市对象中,结果如下:
[
{
"stateName": "California",
"cityName": "Los Angeles"
},
{
"stateName": "Texas",
"cityName": "Houston"
},
{
"stateName": "Texas",
"cityName": "Dallas"
},
{
"stateName": "California",
"cityName": "San Diego"
}]
我试着以几种不同的方式使用内置的合并函数,但没有得到任何结果,此外,关于该函数的文档也不是很直观。
我的一次失败的尝试:
merge(`states[].cities[]`, `states[].{stateName: stateName}`)有什么想法吗?
提前谢谢。
发布于 2019-02-12 20:42:57
你不能使用jmespath来做这件事。看看这个:https://github.com/jmespath/jmespath.js/issues/22#issuecomment-394157797
但是,您现在可以这样做:
states[].{stateName: stateName, cities: cities[].cityName}[]生成类似以下的输出:
[
{
"stateName": "California",
"cities": [
"Los Angeles",
"San Diego"
]
},
{
"stateName": "Texas",
"cities": [
"Houston",
"Dallas"
]
}
]发布于 2019-07-22 17:56:48
我找到了一个解决方案,但是您需要在下面的查询中放入一些硬编码值:
states[].{stateName: stateName, cities: cities[]}[] | @[*].{stateName: {stateName: stateName}, cities: cities} | @[*].[merge(stateName,cities[0]),merge(stateName,cities[1])][]
它提供了:
[
{
"stateName": "California",
"cityName": "Los Angeles"
},
{
"stateName": "California",
"cityName": "San Diego"
},
{
"stateName": "Texas",
"cityName": "Houston"
},
{
"stateName": "Texas",
"cityName": "Dallas"
}
]https://stackoverflow.com/questions/54639933
复制相似问题