如何从嵌套的json数据中获取数组值(java android)

时间:2015-10-05 04:06:53

标签: java android json

我已经从json数据到我的Android应用程序获得了标题,作者和发布日期。

我试图获取 event_start_date event_location ,但失败了。任何人都可以帮助我,我怎么能得到它?

JSON:

{
    "status": "ok",
    "count": 1,
    "count_total": 29,
    "pages": 29,
    "posts": [
        {
            "id": 2815,
            "type": "event",
            "slug": "itb-integrated-career-days",
            "url": "http://example.com/event/itb-integrated-career-days/",
            "status": "publish",
            "title": "Title",
            "title_plain": "Title",
            "content": "<p>test</p>\n",
            "excerpt": "<p>test [&hellip;]</p>\n",
            "date": "2015-09-25 01:09:40",
            "modified": "2015-09-29 22:52:35",
            "categories": [],
            "tags": [],
            "author": {
                "id": 1,
                "slug": "john",
                "name": "john",
                "first_name": "",
                "last_name": "",
                "nickname": "john",
                "url": "",
                "description": ""
            },
            "comments": [],
            "attachments": [
                {
                    "id": 2817,
                    "url": "http://example.com/wp-content/uploads/2015/09/bannertkt102015.gif",
                    "slug": "bannertkt102015",
                    "title": "bannertkt102015",
                    "description": "",
                    "caption": "",
                    "parent": 2815,
                    "mime_type": "image/gif",
                    "images": {
                        "full": {
                            "url": "http://example.com/wp-content/uploads/2015/09/bannertkt102015.gif",
                            "width": 1000,
                            "height": 563
                        },
                        "thumbnail": {
                            "url": "http://example.com/wp-content/uploads/2015/09/bannertkt102015-150x150.gif",
                            "width": 150,
                            "height": 150
                        },
                        "medium": {
                            "url": "http://example.com/wp-content/uploads/2015/09/bannertkt102015-300x169.gif",
                            "width": 300,
                            "height": 169
                        },
                        "large": {
                            "url": "http://example.com/wp-content/uploads/2015/09/bannertkt102015.gif",
                            "width": 1000,
                            "height": 563
                        },
                        "blog-default": {
                            "url": "http://example.com/wp-content/uploads/2015/09/bannertkt102015-806x300.gif",
                            "width": 806,
                            "height": 300
                        }
                    }
                },
                {
                    "id": 2818,
                    "url": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008.jpg",
                    "slug": "2015-09-25_012008",
                    "title": "2015-09-25_012008",
                    "description": "",
                    "caption": "",
                    "parent": 2815,
                    "mime_type": "image/jpeg",
                    "images": {
                        "full": {
                            "url": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008.jpg",
                            "width": 589,
                            "height": 529
                        },
                        "thumbnail": {
                            "url": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008-150x150.jpg",
                            "width": 150,
                            "height": 150
                        },
                        "medium": {
                            "url": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008-300x269.jpg",
                            "width": 300,
                            "height": 269
                        },
                        "large": {
                            "url": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008.jpg",
                            "width": 589,
                            "height": 529
                        },
                        "blog-default": {
                            "url": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008-589x300.jpg",
                            "width": 589,
                            "height": 300
                        }
                    }
                }
            ],
            "comment_count": 0,
            "comment_status": "open",
            "thumbnail": "http://example.com/wp-content/uploads/2015/09/2015-09-25_012008-150x150.jpg",
            "custom_fields": {
                "event_location": [
                    "New York"
                ],
                "event_start_date": [
                    "10/23/2015"
                ],
                "event_start_time": [
                    "09:00 AM"
                ],
                "event_start_date_number": [
                    "1445590800"
                ],
                "event_address_country": [
                    "US"
                ],
                "event_address_state": [
                    "Jawdst"
                ],
                "event_address_city": [
                    "New York"
                ],
                "event_address_address": [
                    "Gedung Sasana Budaya Ganesha (Sabuga) Jalan Tamansari 73, New York"
                ],
                "event_address_zip": [
                    "42132"
                ],
                "event_phone": [
                    "5345"
                ],              
                "post_views_count": [
                    "23"
                ]
            }

        }
    ]
}

我的功能

public void parseJson(JSONObject json) {
        try {
            info.pages = json.getInt("pages");
            // parsing json object
            if (json.getString("status").equalsIgnoreCase("ok")) {
                JSONArray posts = json.getJSONArray("posts");

                info.feedList = new ArrayList<PostItem>();

                for (int i = 0; i < posts.length(); i++) {
                    Log.v("INFO",
                            "Step 3: item " + (i + 1) + " of " + posts.length());
                    try {
                        JSONObject post = (JSONObject) posts.getJSONObject(i);
                        PostItem item = new PostItem();
                        item.setTitle(Html.fromHtml(post.getString("title"))
                                .toString());
                        item.setDate(post.getString("date"));
                        item.setId(post.getInt("id"));
                        item.setUrl(post.getString("url"));
                        item.setContent(post.getString("content"));
                        if (post.has("author")) {
                            Object author = post.get("author");
                            if (author instanceof JSONArray
                                    && ((JSONArray) author).length() > 0) {
                                author = ((JSONArray) author).getJSONObject(0);
                            }

                            if (author instanceof JSONObject
                                    && ((JSONObject) author).has("name")) {
                                item.setAuthor(((JSONObject) author)
                                        .getString("name"));
                            }
                        }

                        if (post.has("tags") && post.getJSONArray("tags").length() > 0) {
                            item.setTag(((JSONObject) post.getJSONArray("tags").get(0)).getString("slug"));
                        }

                        // TODO do we dear to remove catch clause?
                        try {
                            boolean thumbnailfound = false;

                            if (post.has("thumbnail")) {
                                String thumbnail = post.getString("thumbnail");
                                if (thumbnail != "") {
                                    item.setThumbnailUrl(thumbnail);
                                    thumbnailfound = true;
                                }
                            }

                            if (post.has("attachments")) {

                                JSONArray attachments = post
                                        .getJSONArray("attachments");

                                // checking how many attachments post has and
                                // grabbing the first one
                                if (attachments.length() > 0) {
                                    JSONObject attachment = attachments
                                            .getJSONObject(0);

                                    item.setAttachmentUrl(attachment
                                            .getString("url"));

                                    // if we do not have a thumbnail yet, get
                                    // one now
                                    if (attachment.has("images")
                                            && !thumbnailfound) {

                                        JSONObject thumbnail;
                                        if (attachment.getJSONObject("images")
                                                .has("post-thumbnail")) {
                                            thumbnail = attachment
                                                    .getJSONObject("images")
                                                    .getJSONObject(
                                                            "post-thumbnail");

                                            item.setThumbnailUrl(thumbnail
                                                    .getString("url"));
                                        } else if (attachment.getJSONObject(
                                                "images").has("thumbnail")) {
                                            thumbnail = attachment
                                                    .getJSONObject("images")
                                                    .getJSONObject("thumbnail");

                                            item.setThumbnailUrl(thumbnail
                                                    .getString("url"));
                                        }

                                    }
                                }
                            }

                        } catch (Exception e) {
                            Log.v("INFO",
                                    "Item "
                                            + i
                                            + " of "
                                            + posts.length()
                                            + " will have no thumbnail or image because of exception!");
                            e.printStackTrace();
                        }

                        if (item.getId() != info.ignoreId)
                            info.feedList.add(item);
                    } catch (Exception e) {
                        Log.v("INFO", "Item " + i + " of " + posts.length()
                                + " has been skipped due to exception!");
                        e.printStackTrace();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:2)

这应该这样做

JSONObject custom_fields = post.getJSONObject("custom_fields");
JSONArray event_start_date_array = custom_fields.getJSONArray("event_start_date");
JSONArray event_location_array = custom_fields.getJSONArray("event_location");

String event_start_date = event_start_date_array.getString(0);
String event_location = event_location_array.getString(0);