首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中的Groovy Jsonslurper编辑值

数组中的Groovy Jsonslurper编辑值
EN

Stack Overflow用户
提问于 2018-11-14 08:32:40
回答 1查看 3.2K关注 0票数 0

为了解决我的问题,我搜索并尝试了很多东西。但似乎什么都起不到作用。也许我只是理解错了。我有一个像这样的test.json文件。

代码语言:javascript
复制
{
    "TEST-A":             [{ "app_id":"aaa" }],
    "TEST-B":              [{ "app_id":"bbb" }],
    "TEST-C":          [{ "app_id":"ccc" }]
}

现在我想用"xxx“编辑TEST-B。举个例子,我在尝试什么?

代码语言:javascript
复制
import groovy.json.JsonSlurper

def slurper = new groovy.json.JsonSlurper()
def inputFile = new File("../config/test.json")
def inputJSON = new JsonSlurper().parseText(inputFile.text)
def builder = new JsonBuilder(inputJSON)

builder.content.TEST-B[0] = 'xxx'

我以为我已经有了一张地图要编辑,或者我需要使用“断言”?

你好弗罗斯特。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 09:10:32

以下代码:

代码语言:javascript
复制
import groovy.json.*

def data = '''\
{
    "TEST-A":   [{ "app_id":"aaa" }],
    "TEST-B":   [{ "app_id":"bbb" }],
    "TEST-C":   [{ "app_id":"ccc" }]
}'''

def parsed = new JsonSlurper().parseText(data)
println "parsed is a java.util.Map: ${parsed instanceof Map}"

parsed.'TEST-B'[0].app_id = 'xxx'

println "map after change: $parsed"

def result = JsonOutput.toJson(parsed)
println "result is a String: ${result instanceof String}"

println "result: $result"
println "pretty result:\n${JsonOutput.prettyPrint(result)}"

运行时,打印出:

代码语言:javascript
复制
~> groovy test.groovy
parsed is a java.util.Map: true
map after change: [TEST-A:[[app_id:aaa]], TEST-B:[[app_id:xxx]], TEST-C:[[app_id:ccc]]]
result is a String: true
result: {"TEST-A":[{"app_id":"aaa"}],"TEST-B":[{"app_id":"xxx"}],"TEST-C":[{"app_id":"ccc"}]}
pretty result:
{
    "TEST-A": [
        {
            "app_id": "aaa"
        }
    ],
    "TEST-B": [
        {
            "app_id": "xxx"
        }
    ],
    "TEST-C": [
        {
            "app_id": "ccc"
        }
    ]
}

我相信完成了你想要做的事情的本质。要了解关于JsonSlurper的东西是在解析了in之后,您得到的是一个正常的java.util.Map (或者可能是一个依赖于in json的java.util.List )。

换句话说,上面的parsed变量只是一个映射,其中键是字符串,值是映射列表。

要记住的第二件事是,像TEST-B这样的键在groovy中不是有效的标识符,所以您不能只编写parsed.TEST-B,因为这将被解释为parsed.TEST - B,所以必须引用具有以下特殊字符的键。

在更改映射并假设您希望返回到json表示之后,您必须使用类似于上面代码中的JsonOutput。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53295910

复制
相关文章

相似问题

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