簡體   English   中英

groovy jsonbuilder 刪除 json 節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM