提取嵌套json映射



从一些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 }

最新更新