首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON转换为Gpath结果

将JSON转换为Gpath结果
EN

Stack Overflow用户
提问于 2018-09-09 02:11:34
回答 1查看 259关注 0票数 0

我希望将所有的JSON键值转换为Map。其中我需要key作为gpath结果,value作为对象键值。

输入Json

代码语言:javascript
复制
 {
    "employees": {
        "employee": [{
                "id": "1",
                "firstName": "Tom",
                "lastName": "Cruise",
                "photo": "https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg"
            },
            {
                "id": "2",
                "firstName": "Maria",
                "lastName": "Sharapova",
                "photo": "https://pbs.twimg.com/profile_images/3424509849/bfa1b9121afc39d1dcdb53cfc423bf12.jpeg"
            },
            {
                "id": "3",
                "firstName": "James",
                "lastName": "Bond",
                "photo": "https://pbs.twimg.com/profile_images/664886718559076352/M00cOLrh.jpg"
            }
        ]
    }
 }

我所期望的输出,

代码语言:javascript
复制
[employees.employee[0].id:"1",
employees.employee[0].firstName:"tom",
....]

我已经尝试过Groovy ()对象类,但我无法找到将所有键映射到jsonSurper中的解决方案。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-09 02:48:21

这是个奇怪的请求。我想不出你为什么要这么做...但不管怎样,您需要编写一些逻辑来递归通过JsonSlurper生成的映射,并折叠密钥……

假设上面的json在一个字符串变量json

代码语言:javascript
复制
def map = new JsonSlurper().parseText(json)

def collapseKey(String prefix, Map result, value) {
    if (value instanceof Map) {
        value.each { k, v ->
            collapseKey("${prefix ? "${prefix}." : ''}$k", result, v)
        }
    } else if (value instanceof List) {
        value.eachWithIndex{ e, idx ->
            collapseKey("${prefix}[$idx]", result, e)
        }
    } else {
        result."$prefix" = value
    }
    result
}

def result = collapseKey("", [:], map)

您可以(当然)将其解析为映射并执行以下操作:

代码语言:javascript
复制
map.employees.employee[0].firstName
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52238089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档