问题描述
||
好的,我正在从返回JSON的Grails网络服务中查询数据。使用JSONViewer应用查看时,JSON解析良好。当我使用相同的字符串并在Android应用程序中使用JSONObject(string)时,我得到\“ String的值无法转换为JSONObject。\”
这是我的JSON字符串
[[{\"class\":\"mygrails.TopTen\",\"id\":491,\"ttAmount\":14200000,\"ttMlId\":402,\"ttRank\":1,\"ttWeekId\":1108},{\"class\":\"mygrails.MovieList\",\"id\":402,\"mlApproved\":1,\"mlApprovedId\":5,\"mlMovieId\":\"GNOMEOAN\",\"mlReleaseDate\":\"2011-03-08T07:41:45Z\",\"mlTitle\":\"Gnomeo and Juliet\",\"mlWeekId\":1106}]]
现在,JSON来自sql数据的标准JSON转换,该数据使用groovy文件中的render通过导入grails.converters.JSON进行转换。
... //(call to render JSON in the groovy file)
def a
a = Table.findAll(\"from soMetable as st where st.id=\" params.id)
render a as JSON
...
因此,我不确定我做错了什么以及为什么JSON对我来说看起来有点差。 (对于JSON还是新的)
解决方法
在json中,如果看到\“ [] \”表示它是一个json数组,而如果看到\“ {} \”则它是一个json对象。然后两者都可以嵌套另一个。
在您的情况下,字符串以json数组开头。
因此,请尝试以下操作
String str = \"[[{\"class\":\"mygrails.TopTen\",\"id\":491,\"ttAmount\":14200000,\"ttMlId\":402,\"ttRank\":1,\"ttWeekId\":1108},{\"class\":\"mygrails.MovieList\",\"id\":402,\"mlApproved\":1,\"mlApprovedId\":5,\"mlMovieId\":\"GNOMEOAN\",\"mlReleaseDate\":\"2011-03-08T07:41:45Z\",\"mlTitle\":\"Gnomeo and Juliet\",\"mlWeekId\":1106}]]\";
JSONArray jsonArray = new JSONArray(str);
jsonArray = jsonArray.getJSONArray(0);
JSONObject jsonObject = jsonArray.getJSONObject(0);
String class = jsonObject.getString(\"class\"); // class will value \"mygrails.TopTen\"
,尝试从String而不是JSONObject创建JSONArray。我没有对此进行测试,但这应该可以解决问题:您有两个嵌套数组,其中包含实际数据。
,通过http://jsonformat.com/在线查看JSON
http://www.freeformatter.com/json-formatter.html
JSON查看器
http://jsonviewer.stack.hu/
将文本粘贴到此处,您可以看到应该解析的内容: