Tush Bedva
Tush Bedva

Reputation: 67

How to Parse(get the value) nested json data using javascript

{
    "_id" : ObjectId("587f5455da1da85d2bd01fc5"),
    "totalTime" : 0,
    "lastUpdatedBy" : ObjectId("57906bf8f4add282195d0a88"),
    "createdBy" : ObjectId("57906bf8f4add282195d0a88"),
    "workSpaceId" : ObjectId("57906c24f4add282195d0a8a"),
    "locationId" : ObjectId("5790629c841f1a9913b12104"),
    "projectId" : ObjectId("57906d33f4add282195d0aa2"),
    "title" : "asdf asdfasdf",
    "subTitles" : [
        {
            "childrensTitle" : "fffffffffffff",
            "createdBy" : ObjectId("57906bf8f4add282195d0a88"),
            "lastUpdatedBy" : ObjectId("57906bf8f4add282195d0a88"),
            "totalTime" : 0,
            "created_at" : ISODate("2017-01-18T11:41:32.974Z"),
            "subTitles" : [
                {
                    "childrensTitle" : "Ufffffff",
                    "createdBy" : ObjectId("57906bf8f4add282195d0a88"),
                    "lastUpdatedBy" : ObjectId("57906ce1f4add282195d0a96"),
                    "totalTime" : 0,
                    "created_at" : ISODate("2017-01-18T11:41:37.151Z"),
                    "subTitles" : [
                        {
                            "childrensTitle" : "date n time",
                            "createdBy" : ObjectId("57906bf8f4add282195d0a88"),
                            "lastUpdatedBy" : ObjectId("57906bf8f4add282195d0a88"),
                            "totalTime" : 0,
                            "created_at" : ISODate("2017-01-18T11:41:40.716Z"),
                            "subTitles" : [ ],
                            "_id" : ObjectId("587f5474da1da85d2bd01fcb")
                        }
                    ],
                    "_id" : ObjectId("587f5471da1da85d2bd01fca")
                }
            ],
            "_id" : ObjectId("587f546cda1da85d2bd01fc9")
        }
    ],
    "created_at" : ISODate("2017-01-18T11:41:09.301Z"),
    "__v" : 3
}

I am trying to print totalTime of each level but I am only able to print it up to 2 layers… after that it is undefined. For example:

console.log(mainTitle[0].subTitles[req.body.index].subTitles[req.body.index].subTitles[req.body.index].totalTime) // undefined

Upvotes: 0

Views: 104

Answers (1)

rsp
rsp

Reputation: 111404

This is not JSON. This is a JavaScript representation of BSON from MongoDB, which just happens to use unnecessarily quoted object keys.

You would need to define ISODate() and ObjectId() functions (that you can take from Mongo driver or Mongoose) and use them to parse the calls to those functions. Otherwise you will get errors because those functions are undefined.

And you cannot use JSON.parse() to parse it because this is not JSON.

Update

When you access:

mainTitle[0].subTitles[req.body.index].subTitles[req.body.index].subTitles[req.body.index].totalTime

I would simplify it as:

var i = req.body.index;
mainTitle[0].subTitles[i].subTitles[i].subTitles[i].totalTime

but that's just for readability.

I would test in one nesting level at a time:

var i = req.body.index;
console.log(i);
console.log(mainTitle);
console.log(mainTitle[0]);
console.log(mainTitle[0].subTitles);
console.log(mainTitle[0].subTitles[i]);
console.log(mainTitle[0].subTitles[i].subTitles);
console.log(mainTitle[0].subTitles[i].subTitles[i]);
console.log(mainTitle[0].subTitles[i].subTitles[i].subTitles);
console.log(mainTitle[0].subTitles[i].subTitles[i].subTitles[i]);
console.log(mainTitle[0].subTitles[i].subTitles[i].subTitles[i].totalTime);

Not pretty but sometimes it's a best way to narrow down the problem.

Modules that can help

To access deep structures you can use:

Upvotes: 1

Related Questions