从一些REST API接收JSON:
{
"advertiser_id": {
"8253":{
"name":"Signify",
"id":8253
},
"2920":{
"name":"Hyundai",
"id":2920
}
}
}
我不想提取数字内部的映射,如8253
,2920
,但没有硬映射这些数字,它们可以在任何时候不同。无论如何,这些数字只是重复id
。
转换后的预期输出:
[
{
"name":"Signify",
"id":8253
},
{
"name":"Hyundai",
"id":2920
}
]
尝试:
import groovy.json.*
def json = '''
'''
def p = new JsonSlurper().parseText(json)
def result = p["advertiser_id"].collectEntries{ k, v ->
[
id: v.id,
name: v.name
]
}
但是它只返回一个"对象":
{
"id": 8905,
"name": "Spotify"
}
下一个代码也得到了错误的结果:
def a = p["advertiser_id"].collectMany {
it.value.collect{ k, v ->
[
id: k,
name: v
]
}
}
你想建立一个列表,所以你需要collect
代替collectEntries
def p = new JsonSlurper().parseText(json)
def result = p["advertiser_id"].collect{ k, v ->
[
id: v.id,
name: v.name
]
}
和你不做任何转换嵌套对象-所以,你可以简化代码如下:
def result = p.advertiser_id.collect{ k, v -> v }