Question

I'm trying to loop through the results of a JSON response and get the title of each article, however my hosting company mentioned the returned object is not an array, so I can't loop through the articles.

Currently it gives me an undefined on the length of the amount of articles.

How can I loop through the articles and get their titles?

I tried everything below, and finally read somewhere I could use a for-in loop. So I was checking out this example here: http://www.w3schools.com/js/tryit.asp?filename=tryjs_object_for_in

However, I have no idea how to apply this loop on my data to get just the articles and then loop through these and get their properties.

JSON RESPONSE

{
    "blog": {
        "id": "1464",
        "comments": true,
        "url": "blogs\/magazine",
        "rss": "blogs\/magazine.rss",
        "title": "Taj Magazine",
        "articles": {
            "3748": {
                "id": 3748,
                "image": 7442452,
                "url": "blogs\/magazine\/foodies-walhalla-2",
                "title": "Foodies Walhalla 2",
                "author": "",
                "author_url": false,
                "summary": "dit is de samenvatting tekst",
                "content": "dit is het hele artikel",
                "date": "2013-11-13 13:54:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "foodies-walhalla": {
                        "id": "9794",
                        "url": "blogs\/magazine\/tagged\/foodies-walhalla",
                        "title": "Foodies Walhalla",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3747": {
                "id": 3747,
                "image": 7442441,
                "url": "blogs\/magazine\/foodies-walhalla-1",
                "title": "Foodies Walhalla 1",
                "author": "",
                "author_url": false,
                "summary": "f df gdsfg",
                "content": "dsfgsdfgdf sdfg",
                "date": "2013-11-13 11:22:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "foodies-walhalla": {
                        "id": "9794",
                        "url": "blogs\/magazine\/tagged\/foodies-walhalla",
                        "title": "Foodies Walhalla",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3744": {
                "id": 3744,
                "image": 7442425,
                "url": "blogs\/magazine\/beauty-artikel-2",
                "title": "Beauty artikel 2",
                "author": "",
                "author_url": false,
                "summary": "beauty article 2",
                "content": "dfg sfg sdfg sdfgd gdsf df gsdf gdsf g",
                "date": "2013-11-13 11:21:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "beauty": {
                        "id": "9792",
                        "url": "blogs\/magazine\/tagged\/beauty",
                        "title": "beauty",
                        "count": "2"
                    },
                    "healthy": {
                        "id": "9745",
                        "url": "blogs\/magazine\/tagged\/healthy",
                        "title": "healthy",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3745": {
                "id": 3745,
                "image": 7442417,
                "url": "blogs\/magazine\/love-life-1",
                "title": "Love & Life 1",
                "author": "",
                "author_url": false,
                "summary": "dfgdsfgd",
                "content": "f gdf gdfgdfg dfgdsfgdsfgdsfg",
                "date": "2013-11-13 11:21:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "love-life": {
                        "id": "9793",
                        "url": "blogs\/magazine\/tagged\/love-life",
                        "title": "love & life",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3746": {
                "id": 3746,
                "image": 7442388,
                "url": "blogs\/magazine\/love-life-2",
                "title": "Love & Life 2",
                "author": "",
                "author_url": false,
                "summary": "dfkjghksdjfh gdskfjdj sdlkjfhdjfghdjklfsdfkjhg df gd ghdkjsfhgkjsd fg lkjdshklgdfh kjds glkjsdh kljdsfh",
                "content": "dfkjghksdjfh gdskfjdj sdlkjfhdjfghdjklfsdfkjhg df gd ghdkjsfhgkjsd fg lkjdshklgdfh kjds glkjsdh kljdsfh",
                "date": "2013-11-13 11:21:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "love-life": {
                        "id": "9793",
                        "url": "blogs\/magazine\/tagged\/love-life",
                        "title": "love & life",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            }
        }
    },
    "request": {
        "url": "http:\/\/taj-ringen.webshopapp.com\/blogs\/magazine\/?format=json",
        "method": "get",
        "ssl": false,
        "get": {
            "format": "json"
        },
        "post": [],
        "device": {
            "platform": "windows",
            "type": "webkit",
            "mobile": false
        }
    },
    "template": "pages\/blog.rain",
    "renderer": "json"
}

JAVASCRIPT

<div id="loadstatus"></div>

<script type="text/javascript" language="javascript">
    var newresult = '';
    $.ajax({
        type: "GET",
        url: "http://taj-ringen.webshopapp.com/blogs/magazine/?format=json",
        data: "",
        dataType: "json",
        success: function (mydata) {
            console.log('load successful');
            console.log('mydata.blog.articles.length: ' + mydata.blog.articles.length);  //'undefined' error
            for (var i = 0; i < mydata.blog.articles.length; i++) {
                newresult += mydata.blog.articles[i].title;
            }
        }
    });

</script>

I also had a look at this post: Convert Object to JSON string

tried the jQuery.parseJSON function

        console.log(mydata);
        var tmp = jQuery.parseJSON(mydata);
        console.log(tmp);        
        console.log('tmp.blog.articles.length: ' + tmp.blog.articles.length);

But there I get an error Uncaught SyntaxError: Unexpected token o on line jquery-1.10.2.min.js:4

tried the $.map function

        var array = $.map(mydata, function (e) {
            return [$.map(e, function (v) {
                return v;
            })];
        });
        console.log(array);

        console.log('tmp.blog.articles.length: ' + array.blog.articles.length);

Here I get Uncaught TypeError: Cannot use 'in' operator to search for '14' in pages/blog.rain on line jquery-1.10.2.min.js:4

What I'm trying to to is convert the object that is returned by the site and be able to loop through it.

Was it helpful?

Solution

Iterate through the article object, pulling out the keys associated with each article using the method described in the below post:

How to list the properties of a JavaScript object

You could also use the following loop:

for(var article in blog.articles) {
    console.log(blog.articles[article].title);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top