使用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
相关产品推荐
相关产品推荐

