首页 > 解决方案 > 提取嵌套的 json 映射

问题描述

从一些 REST API 收到 JSON:

{
   "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
    ]
}

但它只返回一个“对象”:

{
    "id": 8905,
    "name": "Spotify"
}

下一个代码也得到了错误的结果:

def a = p["advertiser_id"].collectMany {
    it.value.collect{ k, v ->
        [
                id: k,
                name: v
        ]
    }
}

标签: groovy

解决方案


你想建立一个列表 - 所以你需要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 }

推荐阅读