无法解析JSON数据

时间:2015-09-19 09:28:34

标签: java android json

我正在开发一个Android项目。我在从服务器检索的JSON数据解析中需要帮助:

{"item_name":["Navnita","Navnita","Navnita"],"username":["James","John","Jenny"],"review":["Its a relly nice restaurant for Vegetarians! :)","Cool!","Food is just great!"]}

我只想用"username"和他的"review"填充RecyclerView。 现在我使用以下代码来解析JSON数据并填充一个arrayList,然后填充RecyclerView但它给了我错误(下面的logcat):

String result ....;
           JSONObject jObject = new JSONObject(result);
            JSONArray usernameJsonArray =  jObject.getJSONArray("username");
            JSONArray reviewJsonArray = jObject.getJSONArray("review");
            for(int i=0;i<usernameJsonArray.length();i++){
                String username = usernameJsonArray.getJSONObject(i).toString();
                String review = reviewJsonArray.getJSONObject(i).toString();
                getReviewFeedItemsArrayList.add(new GetReviewFeedItems(username,review));
            }

我认为问题出在上面的代码中,但我无法弄明白。这是logcat:

09-19 14:33:24.295  30572-30646/app.usrete.jayant.delvemitt W/System.err﹕ org.json.JSONException: Value James at 0 of type java.lang.String cannot be converted to JSONObject
09-19 14:33:24.305  30572-30646/app.usrete.jayant.delvemitt W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:100)
09-19 14:33:24.305  30572-30646/app.usrete.jayant.delvemitt W/System.err﹕ at org.json.JSONArray.getJSONObject(JSONArray.java:484)

4 个答案:

答案 0 :(得分:3)

直接在你的for循环中写这个

String username=usernameJsonArray.getString(i);

您的内部数据不是JsonObject只是字符串

答案 1 :(得分:1)

使用以下代码来检索数据

            JSONObject jObject = new JSONObject(result);
            JSONArray usernameJsonArray =  jObject.getJSONArray("username");
            JSONArray reviewJsonArray = jObject.getJSONArray("review");
            for(int i=0;i<usernameJsonArray.length();i++)
             {
                String username = usernameJsonArray.getString(i);
                String review = reviewJsonArray.getString(i);
                getReviewFeedItemsArrayList.add(new GetReviewFeedItems(username,review));
            }

答案 2 :(得分:0)

我认为你正在从http响应中获得带有回显JSON格式输出的额外html垃圾。

将http响应转换为字符串后,只需添加此项即可。这段代码将修剪掉额外的html junks并吐出json格式。

jsonData = jsonData.substring(jsonData.indexOf("{\""), jsonData.lastIndexOf("\"}") + 2);

这里“jsonData”是来自http响应的String格式。 在此之后,按照JSON解析的常规步骤进行操作。

答案 3 :(得分:0)

我会使用GSON。首先将您的JSON转换为POJO类http://www.jsonschema2pojo.org/。然后使用GSON解析您的JSON数据:

Gson gson = new Gson();
PojoClass obj = gson.fromJson(jsonString, PojoClas.class);