0
我有以下JSON(存储为在Groovy一个字符串):Grails能够不投JSON阵列HashMap类
{
"isFizz": "true",
"buzzProperties": [
{
"foo": "bar"
},
{
"widget": 35
}
],
"name": "dummy1"
}
以我的Grails控制器我有以下方法处理此JSON作为HTTP请求并试图读入JSON Groovy的瓦尔:
Stuff register() {
def jsonObject = request.JSON
Stuff stuff = new Stuff()
stuff.isFizz = jsonObject.isFizz
stuff.buzzProperties = jsonObject.buzzProperties // stuff.buzzProperties is a HashMap
stuff.name = jsonObject.name
stuff
}
当控制器方法执行(当它接收到一个请求),得到类似如下例外:
Cannot cast object '[{"foo":"bar"},{"widget":35}]' with class 'org.codehaus.groovy.grails.web.json.JSONArray' to class 'java.util.Map' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Map(org.codehaus.groovy.grails.web.json.JSONObject, org.codehaus.groovy.grails.web.json.JSONObject). Stacktrace follows:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[{"foo":"bar"},{"widget":35}]' with class 'org.codehaus.groovy.grails.web.json.JSONArray' to class 'java.util.Map' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Map(org.codehaus.groovy.grails.web.json.JSONObject, org.codehaus.groovy.grails.web.json.JSONObject)
我检查了JSON对JSON lint,它是完全有效的JSON。这里发生了什么?
感谢@Opal(+1) - 我不能(容易)改变Grails的控制器,但可以轻松更改JSON。为了成为一个有效的地图,buzzProperties对象需要在JSON中看起来像什么? – smeeb 2014-10-17 17:23:31
如果你想坚持地图列表,你也可以用这个'jsonObject.buzzProperties.sum()' – cfrick 2014-10-17 17:32:14
@cfrick坏主意,如果你有列表中的项目具有相同的键平坦化。它首先应该是一个json对象。 – dmahapatro 2014-10-17 17:36:04