java - android volley json解析器问题

标签 java android json

我的问题是我的 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&amp;w=300&amp;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/

相关文章:

java - Android:提取html源

java - JSON 值中的空格

java - 不包含主类型;快艇

postgresql - 如何从两个表中获取数据?

postgresql - 查询不返回任何内容

c++ - 更快的 JsonCpp 替代方案允许 Json 对象的复制/可变性?

java - weblogic 上的 Jersey REST channel 返回 'null' 而不是序列化 JSON - 没有错误

java - 将应用程序提交到Spark集群:错误本地类不兼容

android - Android 中来自 Sqlite 的 ListView

android - 为什么ImageView的png图像中包含背景颜色?