Jquery 如何使用元素数组解析json

Jquery 如何使用元素数组解析json,jquery,json,Jquery,Json,我得到了一个json集合,我想解析它。 数据如下: { "_id" : ObjectId("589ecc1b463ede8cf7be3d17"), "Q" : "Q1 ?", "Rates" : [ "Q1-R1", "Q1-R2", "Q1-R3", "Q1-R4" ] } { "_id" : ObjectId("589ecc1b463ede8cf7be3d1

我得到了一个json集合,我想解析它。 数据如下:

{
    "_id" : ObjectId("589ecc1b463ede8cf7be3d17"),
    "Q" : "Q1 ?",
    "Rates" : [
            "Q1-R1",
            "Q1-R2",
            "Q1-R3",
            "Q1-R4"
    ]
}
{
    "_id" : ObjectId("589ecc1b463ede8cf7be3d18"),
    "Q" : "Q2 ?",
    "Rates" : [
            "Q2-R1",
            "Q2-R2",
            "Q2-R3",
            "Q2-R4"
    ]
}
{
    "_id" : ObjectId("589ecc1b463ede8cf7be3d19"),
    "Q" : "Q3 ?",
    "Rates" : [
            "Q3-R1",
            "Q3-R2",
            "Q3-R3",
            "Q3-R4"
    ]
}
我试图用以下方法进行分析:

$.get("/getQesAns", function(data, status){
                        var obj = JSON.parse(data);

                    });
但我得到了一个错误:

Uncaught SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
这个物体怎么了? 我怎样才能检查元素呢?有一个文档数组,每个文档都有一个内部数组
不幸的是,您显示的是无效的JSON。这:

ObjectId("589ecc1b463ede8cf7be3d17")
应该是:

"589ecc1b463ede8cf7be3d17"
因此,基本上您应该修复服务器,使其不发送一些MongoDB内部表示,而是发送有效的JSON,至少如果您希望能够使用JSON解析器对其进行解析的话

如果您无法控制服务器,恐怕regex和string replace技术正在等待您在客户端解析字符串并将其提供给JSON解析器之前对字符串进行处理:

var massagedJSON = someSuperWizardRegexReplaceStuffThatGetsRidOfMongoDBCrap(data);
var obj = JSON.parse(massagedJSON);

还要记住,数组元素之间缺少comas,最后缺少开头[和结尾],使其成为实际数组,这会使SomeSuperWizardRegexReplaceThattGetSridofMongodBcRap函数复杂化:-

如果数据已经是有效的JSON对象而不是字符串,那么您根本不需要运行parse方法,您可以直接将其作为对象使用。但错误表明数据实际上不是有效的JSON,您的示例证明了这一点:

"_id" : ObjectId("589ecc1b463ede8cf7be3d17")
应该是:

"_id" : "589ecc1b463ede8cf7be3d17"
此外,您在顶层有一个对象列表,它们之间没有逗号,而且它们似乎也不是数组的一部分

根据您实际试图表示的内容,这可能是一个有效的版本:

[
  {
    "_id" : "589ecc1b463ede8cf7be3d17",
    "Q" : "Q1 ?",
    "Rates" : [
        "Q1-R1",
        "Q1-R2",
        "Q1-R3",
        "Q1-R4"
    ]
  },
  {
    "_id" : "589ecc1b463ede8cf7be3d18",
    "Q" : "Q2 ?",
    "Rates" : [
        "Q2-R1",
        "Q2-R2",
        "Q2-R3",
        "Q2-R4"
    ]
  },
  {
    "_id" : "589ecc1b463ede8cf7be3d19",
    "Q" : "Q3 ?",
    "Rates" : [
        "Q3-R1",
        "Q3-R2",
        "Q3-R3",
        "Q3-R4"
    ]
  }
]
要回答问题的第二部分,通常可以使用jQuery的each函数迭代数组:

$.each(data, function(index, obj) {
  console.log(obj._id); //just to test
  //do whatever other processing you want here

  //then to iterate over the rates for this object, just rinse and repeat:
  $.each(obj.Rates, function(index, rateObj) {
    console.log(rateObj);
    //..etc
  });
});
尽管许多人认为eval是危险的,而且性能很高,但您可以将其视为一种创造性/简单的解决方案。你可以仔细阅读关于“is eval is evil is evil”的论点,然后按照你的意愿进行

注意:我使用ES2015只是为了模板字符串json。正如其他人所指出的,您提供的JSON无效。我添加了方括号和逗号,假设这是数据实际返回的方式

var json=`[{ _id:Objected589ECC1B463EDE8CF7BE3D17, Q:Q1?, 费率:[ Q1-R1, Q1-R2, Q1-R3, Q1-R4 ] }, { _id:Objected589ECC1B463EDE8CF7BE3D18, Q:Q2?, 费率:[ Q2-R1, Q2-R2, Q2-R3, Q2-R4 ] }, { _id:Objected589ECC1B463EDE8CF7BE3D19, 问:第三季度?, 费率:[ Q3-R1, Q3-R2, Q3-R3, Q3-R4 ] }]`; 功能对象{ 返回id; } var result=eval+json+; result.forEachfunctionitem{ console.logitem.\u id;
};ObjectId不是有效的JSON,缺少coma。您可以根据如何生成json来验证json?ObjectDX无效。您需要修复生成代码,然后jQueryCan会自动为您解析JSON我可以从GitHub克隆一些SuperWizardRegexReplaceThattGetSridofMongodBcRap吗?: