提取嵌套的 json 地图

Extract nested json map

JSON 从一些 REST API:

收到
{
   "advertiser_id": {
      "8253":{
         "name":"Signify",
         "id":8253
      },
      "2920":{
         "name":"Hyundai",
         "id":2920
      }
   }
}

我不想提取像 82532920 这样的数字内的地图,但如果不硬映射这些数字,它们随时可能不同。不管怎样,这些数字只是在里面重复 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 }