我的问题是我的 Android 应用程序无法解析以下 JSON
数据。如果我使用其他 json 源,它解析正常。我已经验证了下面的 json,没有任何问题。它不会抛出任何错误。我不明白为什么。难道是因为日期排在第一位的缘故?
Json 数据如下所示:
{
"2015-05-23 18:48:58": {
"Titlu": "kgjsdfklgjfdgjsdlgjdgjfd",
"PozaPrincipala": "27602",
"Descriere": "fkdsgjslkfdglkgfdsgfdklnm",
"CMSdate": "2015-05-23 18:48:58",
"url": "http://fsdgdgfdggsdfgfgfdg",
"thumb": "http://dasidsaionofafnoinfasnisa"
},
"2015-05-21 20:17:36": {
"Titlu": "jhsdkgjshfgsjdfkhgsf",
"PozaPrincipala": "27592",
"Descriere": "kldsjgfhgdhgfhgsdfhifhgisf",
"CMSdate": "2015-05-21 20:17:36",
"url": "http://gsfdgfsdgsfdgfdgfdg",
"thumb": "http://dvsddggsfngfsgsfn"
}
}
以及我的解析代码:
private static final String url = "http://xxx.ro/xxx";
// Creating volley request obj
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidePDialog();
Log.d(TAG, response.toString());
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
movie.setTitle(obj.getString("Titlu"));
movie.setThumbnailUrl(obj.getString("thumb"));
movie.setLink(obj.getString("url"));
// adding movie to movies array
movieList.add(movie);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hidePDialog();
}
});
最佳答案
您的代码不起作用的原因是您的响应,即
{
"2015-05-23 18:48:58": {
"Titlu": "This is the title",
"Descriere": "Description",
"CMStags": "tags",
"CMSdate": "2015-05-23 18:48:58",
"url": "http:\/\/www.xxx.ro/jdshafhdafhkas",
"thumb": "http:\/\/img.xxx.ro\/?u=http%3A%2F%2Fst.xxx.ro%2Fcms_websites%2Fcms_something%2Flibrary%2Fimg%2F2015%2F05%2Fsome_thumb.jpg&w=300&h=215&c=1"
}
}
有一个名为 "2015-05-23 18:48:58"
的 JSONObject
调用后
JSONObject obj = response.getJSONObject(i);
再次制作另一个JSONObject
,例如
JSONObject objItem = obj.getJSONObject("2015-05-23 18:48:58");
现在做你的事情
Movie movie = new Movie();
movie.setTitle(objItem.getString("Titlu"));
...
...
Also, just in case you have to get the key values (like
"2015-05-23 18:48:58"
.. as you say there are 30 of them) read java-iterate-over-jsonobject.
类似下面的代码可以解决问题
jObject = new JSONObject(contents.trim());
Iterator<?> keys = jObject.keys();
while( keys.hasNext() ) {
String key = (String)keys.next();
// save this key in a ArrayList of String for
// passing to JSONObject objItem = obj.getJSONObject(key);
// instead of JSONObject objItem = obj.getJSONObject("2015-05-23 18:48:58");
if ( jObject.get(key) instanceof JSONObject ) {
}
}
关于java - android volley json解析器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416102/