【发布时间】:2021-11-16 11:33:00
【问题描述】:
我尝试删除包含特定值的 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 SEB/TEST groovy 失败。原因: groovy.json.JsonException: 期待 '}' 或 ',' 但得到了当前字符 'o' int 值为 111
当前读取的字符是 'o',int 值应为 111 '}' 或 ',' 但当前字符 'o' 的 int 值为 111 行 编号 1 索引编号 2 [{op:replace, 路径:/server_information/environment,值:QCSGERFX023},{操作:替换, 路径:/json_detail/pick_batch/0/support_list/0/already_send, value:false}] ..^ at TEST groovy.run(TEST groovy:27) at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194) 在 com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119) 在 com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:430) 在 com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:421) 在 com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:400) 在 com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:392) 在 com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:273) 在 com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:142) 在 com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:133) 在 com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(未知 来源)在 TempTestCase1637062445227.run(TempTestCase1637062445227.groovy:25)
【问题讨论】:
-
这是 not JSON - 这是一个 .toString() 的 groovy 地图。这很可能不是故意的,并且是上游的问题。找到提供此字符串的位置并将其更改为不序列化(如果它在您的应用程序内)或使用能够完成工作的序列化格式(例如 JSON)
-
谢谢cfrick,正如你所说,部分问题是由于这个格式不正确的json我替换了这个代码:
return diff.toString()这个:return new JsonBuilder( diff ).toPrettyString()
标签: groovy jsonslurper jsonbuilder