You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy使用JsonBuilder按路径删除JSON节点报错如何修复

错误原因

  • 你定义的diffOfApi字符串不符合标准JSON格式:所有属性名(op/path/value)和字符串类型的属性值都没有加双引号,JsonSlurper默认只能解析标准格式JSON,直接报错。
  • 过滤操作调用对象错误:JsonBuilder是用来生成JSON字符串的工具类,本身不支持集合的removeAll方法,你需要对JsonSlurper解析得到的集合对象执行过滤。

修复后代码

import groovy.json.JsonSlurper
import groovy.json.JsonBuilder
String pathPrefix = "/server_information/environment"
String pathSuffix = "/server_information/environment"

// 修正JSON格式:所有字符串属性、值补充双引号
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)

println "removeDiffByPath() - avant removeAll parsedJsonDiff : $slurped"
// 对解析得到的集合执行过滤
slurped.removeAll { it.path.contains(pathPrefix) && it.path.contains(pathSuffix) }
println "removeDiffByPath() - apres removeAll parsedJsonDiff : $slurped"

// 过滤完成后再构造JsonBuilder输出结果
def parsedJsonDiff = new JsonBuilder(slurped)
println parsedJsonDiff.toString()

可选优化方案

如果你拿到的原始JSON确实没有双引号,不想修改原始JSON字符串,可以开启JsonSlurper的宽松解析模式,不需要调整JSON内容就能完成解析:

// 替换原来的解析逻辑即可
def slurped = new JsonSlurper().setLax(true).parseText(diffOfApi)

内容的提问来源于stack exchange,提问作者Sebastien TANIERE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:45:05