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