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

标签 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层......之后它是未定义。例如:

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

最佳答案

这不是 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);

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

可以提供帮助的模块

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

关于javascript - 如何使用 javascript 解析(获取值)嵌套的 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737522/

相关文章:

javascript - 如何防止自动解析、AJAX 获取的 JSON 成为窗口变量?

c# - 使用 Json.NET 从 WebService 反序列化大型 json

node.js - Node 串口 O/S 要求

javascript - JQuery:仅按类从另一个 <div> 获取文本

javascript - 如何使用 JavaScript 从 "data"属性读取数据

javascript - 如何知道鼠标按钮的当前状态(mouseup state or mousedown state)

javascript - 在按键事件 node.js rawmode 中检测输入

javascript - 为什么 CSS :active on link doesn't make the current page link highlighted?

php json_encode & newline, swift JSONSerialization 导致奇怪的输出

javascript - REST api/postman - 无法获取/路由错误