为了解决我的问题,我搜索并尝试了很多东西。但似乎什么都起不到作用。也许我只是理解错了。我有一个像这样的test.json文件。
{
"TEST-A": [{ "app_id":"aaa" }],
"TEST-B": [{ "app_id":"bbb" }],
"TEST-C": [{ "app_id":"ccc" }]
}现在我想用"xxx“编辑TEST-B。举个例子,我在尝试什么?
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'我以为我已经有了一张地图要编辑,或者我需要使用“断言”?
你好弗罗斯特。
发布于 2018-11-14 09:10:32
以下代码:
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)}"运行时,打印出:
~> 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。
https://stackoverflow.com/questions/53295910
复制相似问题