Grails webservice的Android JSONObject造成问题

问题描述

|| 好的,我正在从返回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/ 将文本粘贴到此处,您可以看到应该解析的内容: