来自Grails webservice的Android JSONObject问题

时间:2011-04-14 07:47:43

标签: android json grails

好的,我正在从返回JSON的Grails webservice中查询数据。使用JSONViewer应用程序查看时的JSON解析正常。当我在我的Android应用程序中使用相同的字符串并使用JSONObject(字符串)时,我得到“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的新手)

3 个答案:

答案 0 :(得分:2)

尝试从String而不是JSONObject创建JSONArray。我没有对此进行测试,但应该可以解决这个问题:你有两个嵌套数组,其中包含实际数据。

答案 1 :(得分:2)

在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"

答案 2 :(得分:0)

使用http://jsonformat.com/

在线查看您的JSON

http://www.freeformatter.com/json-formatter.html

JSON Viewer http://jsonviewer.stack.hu/

将文字粘贴在那里,您可以看到应该解析的内容: