使用Groovy JsonBuilder生成指定JSON报错,求解决方案
解决Groovy JsonBuilder生成指定JSON的问题
首先看你碰到的错误:groovy.lang.MissingPropertyException: No such property: appendCricket for class: groovy.json.JsonBuilder,问题出在你在baleRun的闭包里错误地直接调用了builder.appendCricket,没用到JsonBuilder闭包内的DSL语法来构建嵌套结构,另外你还漏掉了目标JSON里的isOut字段。
下面是正确的代码实现:
import groovy.json.* def builder = new JsonBuilder() builder { isOut false // 补上你之前遗漏的isOut字段 baleRun { incData true // 直接在baleRun闭包里用DSL语法定义appendCricket数组 appendCricket([ { min 10 max 32 price "10" // 注意和目标JSON的"10"保持一致,不是你之前写的"10000" } ]) } } // 打印验证生成的JSON println builder.toPrettyString()
关键修正说明:
- 根节点用
builder { ... }包裹,同时包含isOut和baleRun两个顶级字段 - 在
baleRun的闭包内,直接用appendCricket([...])的DSL写法——JsonBuilder的闭包内部会自动把方法调用转化为JSON键值对,不需要显式调用builder实例的方法 - 调整了
price的值,和你目标JSON的要求对齐
运行这段代码后,生成的JSON就是你需要的:
{ "isOut": false, "baleRun": { "incData": true, "appendCricket": [ { "min": 10, "max": 32, "price": "10" } ] } }
内容的提问来源于stack exchange,提问作者avidCoder




