首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >groovy jsonbuilder删除json节点。

groovy jsonbuilder删除json节点。
EN

Stack Overflow用户
提问于 2021-11-16 11:33:00
回答 1查看 432关注 0票数 0

当json节点包含特定值时,我尝试删除它。但我犯了个错误。目标是从json中删除一个元素,检查它的路径是否包含前缀和后缀。

你能帮我使我的代码正常工作吗?

代码语言:javascript
复制
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder
String pathPrefix = "/server_information/environment"
String pathSuffix = "/server_information/environment"

String diffOfApi = """[{op:replace, path:/server_information/environment, value:QCSGERFX023}, {op:replace, path:/json_detail/pick_batch/0/support_list/0/already_send, value:false}]"""    JsonSlurper slurper = new JsonSlurper()
def slurped = slurper.parseText(diffOfApi)
def parsedJsonDiff = new JsonBuilder(slurped)

println "removeDiffByPath() - avant removeAll parsedJsonDiff : $parsedJsonDiff"
//parsedJsonDiff.removeAll { it.path == "/json_detail/preparation_list/0/consignee/update_date" }
parsedJsonDiff.removeAll { it.path.contains(pathPrefix) && it.path.contains(pathSuffix) }
println "removeDiffByPath() - apres removeAll parsedJsonDiff : $parsedJsonDiff"

println parsedJsonDiff.toString()

就目前而言,我得到了一个错误:

测试用例/_DEBUG/ Test失败。原因: groovy.json.JsonException:期望'}‘或’',但得到当前字符'o‘,其int值为111个。

当前字符读取为'o‘,其int值为111个,期望'}’或‘’,但得到当前字符'o‘,其int值为111号,索引号为2{op:替换,路径:/server_information/environment,值:QCSGERFX023 023},{op:replace,path:/json_detail/pick_batch/0/support_list/0/already_send,值:false} com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194) at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119) at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:430) at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:421) at com.kms.katalon.core.main.TestCaseExecutor ( TEST groovy:27).processExecutionPhase(TestCaseExecutor.java:400) at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:392) at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:273) at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:142) at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:133) at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)

EN

回答 1

Stack Overflow用户

发布于 2021-11-16 14:05:02

多亏了cfrick,我纠正了diffOfApi json的格式错误(缺少"")。然后我使用jsonSlurper而不是jsonBuilder来使用removeAll()

以下是工作代码:

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

String pathPrefix = "/server_information/environment"
String pathSuffix = "/server_information/environment"
int i=0

//String diffOfApi = """[{op:replace, path:/server_information/environment, value:QCSGERFX023}, {op:replace, path:/json_detail/pick_batch/0/support_list/0/already_send, value:false}]"""
String diffOfApi = """[{"op":"replace", "path":"/server_information/environment", "value":"QCSGERFX023"}, {"op":"replace", "path":"/json_detail/pick_batch/0/support_list/0/already_send", "value":"false"}]"""
JsonSlurper slurper = new JsonSlurper()
//slurper.setType(JsonParserType.LAX)

def slurped = slurper.parseText(diffOfApi)
//def parsedJsonDiff = new JsonBuilder(slurped)

println "removeDiffByPath() - avant removeAll parsedJsonDiff : $slurped"
// on ne tient pas compte des modifs de date de consignee
slurped.each {println "slurped " + ++i + " "+it}
slurped.removeAll { it.path.contains(pathPrefix) && it.path.contains(pathSuffix) }

println "removeDiffByPath() - apres removeAll parsedJsonDiff : $slurped"

def parsedJsonDiff = new JsonBuilder(slurped)

println parsedJsonDiff.toPrettyString()

现在我得到了这个结果:

代码语言:javascript
复制
2021-11-16 15:00:59.997 DEBUG testcase.TEST groovy                     - 12: println(parsedJsonDiff.toPrettyString())
[
    {
        "op": "replace",
        "path": "/json_detail/pick_batch/0/support_list/0/already_send",
        "value": "false"
    }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69988390

复制
相关文章

相似问题

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