2015-09-19 202 views
1

我正在开发一个android项目。我需要在我从服务器检索该JSON数据分析帮助:无法解析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) 
+0

您是否控制来自服务器的数据?重构你的JSON可能是有益的,例如'{[“item”:“Nanvita”,“username”:“James”,“review”:“Best ever!”],[...],[... ]}'。对于你的问题:看起来像@Ravi明白了! –

回答

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)); 
      } 
0

我想你会得到额外的HTML垃圾与你的回声JSON的fo来自http响应的rmat输出。

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

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

这里“jsonData”是你的http响应中的字符串格式。 之后,按照通常的步骤进行JSON解析。

0

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

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