Javascript d3.js解析文件中类似JSON的数据

Javascript d3.js解析文件中类似JSON的数据,javascript,json,d3.js,Javascript,Json,D3.js,我正在努力从JSON文件中读取数据 我要读取的JSON文件具有以下结构: {"name":"Andy Hunt", "title":"Big Boss", "age": 68, "bonus": true } {"name":"Charles Mack", "title":"Jr Dev", "age":24, "bonus": false } [ {"name":"Andy Hunt", "title":"Big Boss", "age": 68, "b

我正在努力从JSON文件中读取数据

我要读取的JSON文件具有以下结构:

{"name":"Andy Hunt",
  "title":"Big Boss",
  "age": 68,
  "bonus": true
}
{"name":"Charles Mack",
  "title":"Jr Dev",
  "age":24,
  "bonus": false
}
[
 {"name":"Andy Hunt",
  "title":"Big Boss",
  "age": 68,
  "bonus": true
 },
 {"name":"Charles Mack",
  "title":"Jr Dev",
  "age":24,
  "bonus": false
 }
]
然而,据我所知,d3.js只能解析具有以下结构的JSON数组:

{"name":"Andy Hunt",
  "title":"Big Boss",
  "age": 68,
  "bonus": true
}
{"name":"Charles Mack",
  "title":"Jr Dev",
  "age":24,
  "bonus": false
}
[
 {"name":"Andy Hunt",
  "title":"Big Boss",
  "age": 68,
  "bonus": true
 },
 {"name":"Charles Mack",
  "title":"Jr Dev",
  "age":24,
  "bonus": false
 }
]
我使用此代码段试图显示第一个数据对象,只是为了看看它是否有效:

d3.json("/data/sample_data.json", function(data) {
  console.log(data[0]);
});
这适用于第二个JSON结构,但不适用于第一个JSON结构

现在我的问题是:是否可以用d3.js以某种方式读入数据? 还是我必须编写一个程序,将整个JSON文件重新格式化为JSON数组


编辑:结果表明我想要使用的数据格式为NDJSON。因此,目前除了将数据解析为文本并按照@Mark解释的方式在移动中重新格式化之外,没有办法用d3.js本机读取数据。

您试图读取的JSON文件格式不正确JSON(根据标准)可以是名称/值对的集合,即对象或对象列表,即对象数组。请参阅:

  • 如果您使用的是JSON文件,则该文件包含以下数据(注意格式-单个对象):

    d3.json将提供以下结果:

    => {name: "Andy Hunt", title: "Big Boss", age: 68, bonus: true, value: 500}
    
  • 您已经用数组结构尝试过了


  • 我建议您将JSON文件更改为对象数组。希望这能澄清问题。

    您试图读取的JSON文件格式不正确JSON(根据标准)可以是名称/值对的集合,即对象或对象列表,即对象数组。请参阅:

  • 如果您使用的是JSON文件,则该文件包含以下数据(注意格式-单个对象):

    d3.json将提供以下结果:

    => {name: "Andy Hunt", title: "Big Boss", age: 68, bonus: true, value: 500}
    
  • 您已经用数组结构尝试过了


  • 我建议您将JSON文件更改为对象数组。希望这能澄清问题。

    正如@Shashank指出的那样,您的
    JSON
    完全无效。这与
    d3
    无关,而是与JavaScript和可接受的
    JSON
    格式有关。那么,我们如何修复它呢?您可以在d3/javascript本身中执行此操作,而不是预处理文件

    // how many lines of JSON make an object?
    var chunks = 5,
        data = [];
    //download file as TEXT
    d3.text("data.txt", function(error, text) {
      if (error) throw error;
      // split on new line
      var txt = text.split("\n");
      // iterate it
      for (var i = 0; i < txt.length; i += chunks) {
        var block = "";
        // grab blocks of 5 lines
        for (var j = 0; j < chunks; j++ ){
          block += txt[i+j];
        }
        // parse as JSON and push into data ARRAY
        data.push(JSON.parse(block));
      }
      console.log(data);
    });
    
    //一个对象包含多少行JSON?
    var chunks=5,
    数据=[];
    //以文本形式下载文件
    文本(“data.txt”,函数(错误,文本){
    如果(错误)抛出错误;
    //在新线上拆分
    var txt=text.split(“\n”);
    //迭代它
    for(变量i=0;i

    这里它运行在一个.

    上,正如@Shashank指出的那样,您的
    JSON
    完全无效。这与
    d3
    无关,而是与JavaScript和可接受的
    JSON
    格式有关。那么,我们如何修复它呢?您可以在d3/javascript本身中执行此操作,而不是预处理文件

    // how many lines of JSON make an object?
    var chunks = 5,
        data = [];
    //download file as TEXT
    d3.text("data.txt", function(error, text) {
      if (error) throw error;
      // split on new line
      var txt = text.split("\n");
      // iterate it
      for (var i = 0; i < txt.length; i += chunks) {
        var block = "";
        // grab blocks of 5 lines
        for (var j = 0; j < chunks; j++ ){
          block += txt[i+j];
        }
        // parse as JSON and push into data ARRAY
        data.push(JSON.parse(block));
      }
      console.log(data);
    });
    
    //一个对象包含多少行JSON?
    var chunks=5,
    数据=[];
    //以文本形式下载文件
    文本(“data.txt”,函数(错误,文本){
    如果(错误)抛出错误;
    //在新线上拆分
    var txt=text.split(“\n”);
    //迭代它
    for(变量i=0;i

    这是在a上运行的。

    谢谢您!这就像一个符咒,我能够修改它来解析我的数据。我仍然有点困惑,为什么我的数据源是无效的,因为其他开发人员似乎没有任何问题。但是有了这个解决方案,我应该能够让它运行。谢谢你!这就像一个符咒,我能够修改它来解析我的数据。我仍然有点困惑,为什么我的数据源是无效的,因为其他开发人员似乎没有任何问题。但有了这个解决方案,我应该能够让它运行。