[英]groovy jsonbuilder remove json node
我嘗試刪除包含特定值的 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/測試常規失敗。 原因:groovy.json.JsonException:期待 '}' 或 ',' 但得到當前字符 'o' 的 int 值為 111
當前讀取的字符是 'o',int 值為 111,期待 '}' 或 ',' 但當前字符 'o' 的 int 值為 111 行號 1 索引號 2 [{op:replace, path:/ server_information/environment, value:QCSGERFX023}, {op:replace, path:/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:421) :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(TestC aseMain.java:142) 在 com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:133) 在 com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source) 在 TempTestCase1637062445227 .run(TempTestCase1637062445227.groovy:25)
感謝 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"
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.