当json节点包含特定值时,我尝试删除它。但我犯了个错误。目标是从json中删除一个元素,检查它的路径是否包含前缀和后缀。
你能帮我使我的代码正常工作吗?
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)
发布于 2021-11-16 14:05:02
多亏了cfrick,我纠正了diffOfApi json的格式错误(缺少"")。然后我使用jsonSlurper而不是jsonBuilder来使用removeAll()
以下是工作代码:
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()现在我得到了这个结果:
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"
}
]https://stackoverflow.com/questions/69988390
复制相似问题