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

使用Groovy脚本转换JSON到XML时遇属性缺失错误求助

Groovy JSON转XML报MissingPropertyException问题分析与解决

问题根源

报错java.lang.String类不存在question属性,本质是你在代码里把字符串类型的节点当成了对象去访问question属性——String类本身没有这个属性,自然会抛出异常。通常是因为:

  • JSON结构中,你要访问的question所在的节点实际是字符串,而非嵌套对象;
  • 代码中对JSON解析后的对象层级判断错误,误将某个字符串节点当成了包含question属性的对象。

解决步骤

1. 确认JSON结构

先检查待转换的JSON数据,比如你可能遇到这种错误结构:

{
  "survey": "User Survey",
  "question": "What's your favorite language?"
}

如果代码里写json.survey.question,那survey是字符串,访问它的question属性必然报错。而正确的嵌套结构应该是:

{
  "survey": {
    "question": "What's your favorite language?"
  }
}

2. 排查代码的属性访问逻辑

用println(json.dump())打印解析后的JSON对象结构,确认每个节点的类型和层级。比如:

def json = new JsonSlurper().parse(new File("input.json"))
println(json.dump()) // 输出对象结构,明确哪些是字符串、哪些是对象/数组

根据打印结果调整代码,比如如果JSON是数组结构:

{
  "questions": [
    {"id": 1, "content": "Q1"},
    {"id": 2, "content": "Q2"}
  ]
}

代码要遍历数组,而非直接访问属性:

def xmlBuilder = new groovy.xml.MarkupBuilder()
xmlBuilder.root {
    json.questions.each { q ->
        question(id: q.id, q.content)
    }
}

3. 增加类型校验(可选)

如果JSON结构可能存在不确定性,可以在代码中增加类型判断,避免报错:

if (json.survey instanceof Map) { // 确认survey是对象类型
    xmlBuilder.question(json.survey.question)
} else {
    xmlBuilder.note("No valid question found")
}

总结

核心是要匹配JSON的实际结构来编写访问逻辑,先确认解析后每个节点的类型,再针对性处理,不要想当然地访问属性。

内容的提问来源于stack exchange,提问作者Yalamati hemanth kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:50:29