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

Chr*_*isW 1 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
}
Run Code Online (Sandbox Code Playgroud)

但是,据我了解,d3.js 只能解析具有以下结构的 JSON 数组:

[
 {"name":"Andy Hunt",
  "title":"Big Boss",
  "age": 68,
  "bonus": true
 },
 {"name":"Charles Mack",
  "title":"Jr Dev",
  "age":24,
  "bonus": false
 }
]
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码片段尝试显示第一个数据对象,只是为了看看它是否有效:

d3.json("/data/sample_data.json", function(data) {
  console.log(data[0]);
});
Run Code Online (Sandbox Code Playgroud)

这适用于第二个 JSON 结构,但不适用于第一个结构。

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

编辑:原来我想使用的数据格式为 NDJSON。因此,目前除了将数据解析为文本并按照 @Mark 解释的方式重新格式化之外,没有其他方法可以使用 d3.js 本地读取数据。

Mar*_*ark 5

正如@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);
});
Run Code Online (Sandbox Code Playgroud)

这里它运行在一个plunker上。