如何加载json对象而不是json文件

时间:2016-03-10 07:55:44

标签: json d3.js

我正在尝试构建一个Web项目,我以JSON格式获取详细信息,例如:

{
    "file_id": 333, 
    "t": "2016-03-08 12:00:56"
}

我试图在d3 js条形图中显示输出。我面临的问题是我得到的代码是为JSON文件而不是从JSON反序列化的对象。任何人都可以帮我解决这个问题吗?

JSON文件的工作脚本部分是:

d3.json("FILENAME", function(error, data) {
    data = JSON.parse(data);
    x.domain(data.map(function(d) { return d.letter }));
    y.domain([0, d3.max(data, function(d) { return d.frequency })]);

如果我将文件名更改为对象,则无效。

2 个答案:

答案 0 :(得分:18)

作为JS库D3只使用JS对象(以及其他JS数据类型),d3.json只是从外部文件加载对象的方法。因此,如果您不需要从外部文件加载数据,则不要使用d3.json

//d3.json("FILENAME", function(error, data) {
    //data = JSON.parse(data);
    var data = {
        "file_id": 333, 
        "t": "2016-03-08 12:00:56"
    }; //your own object
    x.domain(data.map(function(d) { return d.file_id}));
    y.domain([0, d3.max(data, function(d) { return d.t})]);

希望有所帮助

答案 1 :(得分:0)

  

如果我将文件名更改为对象,则无效。

然后你应该在一个函数中调用它并传递params中的对象:

var obj = {}; // the object to be be passed for chart

function updateGraph(o){ // get in the params here
    var x = d3.scale.ordinal().rangeRoundBands([0, width]),
        y = d3.scale.linear().range([height, 0]);

    x.domain(o.letter);
    y.domain([0, o.frequency]);
}

updateGraph(obj); // <----pass it here