如何使用javascript解析(获取值)嵌套的json数据

时间:2017-01-19 08:54:47

标签: javascript json node.js mongodb express

{
    "_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
}

我正在尝试打印每个级别的totalTime,但我只能将其打印到2层...之后它是undefined。例如:

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

1 个答案:

答案 0 :(得分:1)

这不是JSON。这是来自MongoDB的BSON的JavaScript表示,恰好使用了不必要的引用对象密钥。

您需要定义ISODate()ObjectId()函数(可以从Mongo驱动程序或Mongoose中获取)并使用它们来解析对这些函数的调用。否则,您将收到错误,因为这些函数未定义。

并且你不能使用JSON.parse()来解析它,因为这不是JSON。

更新

访问时:

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

我会将其简化为:

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

但这只是为了提高可读性。

我会一次在一个嵌套级别进行测试:

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);

不漂亮,但有时这是缩小问题范围的最佳方式。

可以提供帮助的模块

要访问深层结构,您可以使用: