如何使用 replaceAll 方法删除 JSON 数组、括号、键和值?
How to remove the JSON array, brackets, key and value using replaceAll method?
我有以下 JSON 作为输出:-
def desiredJson = '{"count": 4, "max": "12", "min": 0, "details": [{"goBus": {"first": 12800, "second": 11900, "third": 12800},"goAir": {"first": 12800, "second": 11900, "third": 12800}, "gotTrain": {"first": 12800, "second": 11900},"sell": true, "darn": 2,"rate": [{ "busRate": 11900, "flag": false, "percent": 0}],}],}'
我想删除 "count" 键及其值,删除
"goBus": {
"first": 12800,
"second": 11900,
"third": 12800
},
并删除 "details" 节点的方括号。
我已尝试使用以下代码删除并替换为 null:-
def slurper = new JsonSlurper();
def json = slurper.parse(file)
def newjson = JsonOutput.toJson(json).toString()
String j = "max"
newjson = newjson.replaceAll(""+ j +"", "")
log.info newjson
作为输出,最大值没有被删除。或者有没有其他方法可以从 JSON.
中删除这些所有内容
谁能帮我解决这个问题?
我也试过这个:-
def json = new JsonSlurper().parseText(desiredJson)
def njson = json.details.goBus
def pjson = njson.remove()
log.info JsonOutput.toJson(pjson)
它正在返回 false。
字符串替换通常没有理由这样做——它很有可能把事情搞砸。您可以在将其写回 JSON 之前修改地图。例如:
import groovy.json.*
def jsonStr = '{"a": 1, "b": [{"c": 3, "d": 4}]}}'
def json = new JsonSlurper().parseText(jsonStr)
// XXX: first "de-array" `b`
json.b = json.b.first()
// next remove `c` from it
json.b.remove('c')
println JsonOutput.toJson(json)
// => {"a":1,"b":{"d":4}}
编辑:
OP 也想摆脱数组,尽管这会混淆命名并且只有在至少有一个元素时才有效(见评论)
这是具有您所需输出的有效解决方案
工作代码在这里Working example
import groovy.json.*
def jsonStr = '''{
"count": 4,
"max": "12",
"min": 0,
"details": [{
"goBus": {
"first": 12800,
"second": 11900,
"third": 12800
},
"goAir": {
"first": 12800,
"second": 11900,
"third": 12800
},
"gotTrain": {
"first": 12800,
"second": 11900,
"third": 12800,
"fourth": 13000
},
"sell": true,
"darn": 2,
"rate": [{
"busRate": 11900,
"flag": false,
"percent": 0
}]
}]
}'''
def json = new JsonSlurper().parseText(jsonStr)
json.details[0].remove('goBus')
println JsonOutput.toJson(json)
我有以下 JSON 作为输出:-
def desiredJson = '{"count": 4, "max": "12", "min": 0, "details": [{"goBus": {"first": 12800, "second": 11900, "third": 12800},"goAir": {"first": 12800, "second": 11900, "third": 12800}, "gotTrain": {"first": 12800, "second": 11900},"sell": true, "darn": 2,"rate": [{ "busRate": 11900, "flag": false, "percent": 0}],}],}'
我想删除 "count" 键及其值,删除
"goBus": {
"first": 12800,
"second": 11900,
"third": 12800
},
并删除 "details" 节点的方括号。
我已尝试使用以下代码删除并替换为 null:-
def slurper = new JsonSlurper();
def json = slurper.parse(file)
def newjson = JsonOutput.toJson(json).toString()
String j = "max"
newjson = newjson.replaceAll(""+ j +"", "")
log.info newjson
作为输出,最大值没有被删除。或者有没有其他方法可以从 JSON.
中删除这些所有内容谁能帮我解决这个问题?
我也试过这个:-
def json = new JsonSlurper().parseText(desiredJson)
def njson = json.details.goBus
def pjson = njson.remove()
log.info JsonOutput.toJson(pjson)
它正在返回 false。
字符串替换通常没有理由这样做——它很有可能把事情搞砸。您可以在将其写回 JSON 之前修改地图。例如:
import groovy.json.*
def jsonStr = '{"a": 1, "b": [{"c": 3, "d": 4}]}}'
def json = new JsonSlurper().parseText(jsonStr)
// XXX: first "de-array" `b`
json.b = json.b.first()
// next remove `c` from it
json.b.remove('c')
println JsonOutput.toJson(json)
// => {"a":1,"b":{"d":4}}
编辑:
OP 也想摆脱数组,尽管这会混淆命名并且只有在至少有一个元素时才有效(见评论)
这是具有您所需输出的有效解决方案
工作代码在这里Working example
import groovy.json.*
def jsonStr = '''{
"count": 4,
"max": "12",
"min": 0,
"details": [{
"goBus": {
"first": 12800,
"second": 11900,
"third": 12800
},
"goAir": {
"first": 12800,
"second": 11900,
"third": 12800
},
"gotTrain": {
"first": 12800,
"second": 11900,
"third": 12800,
"fourth": 13000
},
"sell": true,
"darn": 2,
"rate": [{
"busRate": 11900,
"flag": false,
"percent": 0
}]
}]
}'''
def json = new JsonSlurper().parseText(jsonStr)
json.details[0].remove('goBus')
println JsonOutput.toJson(json)