【问题标题】:How to Parse(get the value) nested json data using javascript如何使用javascript解析(获取值)嵌套的json数据
【发布时间】:2017-01-19 08:54:47
【问题描述】:
{
    "_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

【问题讨论】:

  • 您的 json 无效
  • 你可以说嵌套/嵌入相同类型的数组(递归)! @ricky
  • 请告诉我哪里错了:(
  • ObjectId("587f5455da1da85d2bd01fc5") 这在 MongoDB 中是有效的,但如果你谈论 JSON,它是无效的数据类型。应该是"587f5455da1da85d2bd01fc5"
  • 是的,你是对的,它的 mongodb 之一!

标签: javascript json node.js mongodb express


【解决方案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);

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

可以提供帮助的模块

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

【讨论】:

  • 感谢大家的宝贵建议!!
  • 我没有收到任何错误!我只是无法控制台“totalTime”字段.....但我能够控制台“childrensTitle”字段请对此提出任何建议。我正在使用#MeanStack 框架
  • @TushBedva 查看我的更新答案以获得更多建议。
  • 我试过这个 var i = req.body.index;控制台.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]); (2层)....之后,如果我保持totalTime,它是未定义的。但如果我不保留 totalTime 它就要来了!
  • @TushBedva 答案是rsp写的,不是我写的。
猜你喜欢
  • 2019-07-10
  • 2021-05-06
  • 2021-08-21
  • 2018-09-16
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多