使用 Groovy JsonSlurper 解析对象数组
Using Groovy JsonSlurper to parse an array of objects
Groovy 这里。我正在解析一个包含所有国家/地区列表的文件:
{
"countries": [
{
"id": "1",
"sortname": "AF",
"name": "Afghanistan"
},
{
"id": "2",
"sortname": "AL",
"name": "Albania"
},
...
]
}
我正在尝试将每个国家读入一个可解析的对象,然后我可以在我的代码中进行处理:
String countriesJson = new File(classLoader.getResource('countries.json').getFile()).text
def countries = new JsonSlurper().parseText(countriesJson)
countries.each { country ->
String sortname = country.sortname
String name = country.name
// do something with all this info and then move on to the next country
}
当我 运行 这段代码时,我得到 MissingPropertyException
s:
Exception in thread "main" groovy.lang.MissingPropertyException: No such property: sortname for class: java.util.LinkedHashMap$Entry
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:66)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
...rest of stacktrace omitted for brevity
我该怎么做才能解决这个问题,以便我可以将数组 JSON 对象解析为我的 sortname
和 name
变量?
假设您的 json 包裹在 { ... }
中所以它是有效的(与问题不同),您需要先获取国家/地区对象。
所以:
countries.countries.each { country ->
String sortname = country.sortname
String name = country.name
// do something with all this info and then move on to the next country
}
也许可以将变量 countries
重命名为不那么混乱的名称?
Groovy 这里。我正在解析一个包含所有国家/地区列表的文件:
{
"countries": [
{
"id": "1",
"sortname": "AF",
"name": "Afghanistan"
},
{
"id": "2",
"sortname": "AL",
"name": "Albania"
},
...
]
}
我正在尝试将每个国家读入一个可解析的对象,然后我可以在我的代码中进行处理:
String countriesJson = new File(classLoader.getResource('countries.json').getFile()).text
def countries = new JsonSlurper().parseText(countriesJson)
countries.each { country ->
String sortname = country.sortname
String name = country.name
// do something with all this info and then move on to the next country
}
当我 运行 这段代码时,我得到 MissingPropertyException
s:
Exception in thread "main" groovy.lang.MissingPropertyException: No such property: sortname for class: java.util.LinkedHashMap$Entry
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:66)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
...rest of stacktrace omitted for brevity
我该怎么做才能解决这个问题,以便我可以将数组 JSON 对象解析为我的 sortname
和 name
变量?
假设您的 json 包裹在 { ... }
中所以它是有效的(与问题不同),您需要先获取国家/地区对象。
所以:
countries.countries.each { country ->
String sortname = country.sortname
String name = country.name
// do something with all this info and then move on to the next country
}
也许可以将变量 countries
重命名为不那么混乱的名称?