提取嵌套的 json 地图
Extract nested json map
JSON 从一些 REST API:
收到
{
"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
]
}
但它returns只有一个“对象”:
{
"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 }
JSON 从一些 REST API:
收到{
"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
]
}
但它returns只有一个“对象”:
{
"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 }