d3 js - 在没有 http get 的情况下加载 json

Posted

技术标签:

【中文标题】d3 js - 在没有 http get 的情况下加载 json【英文标题】:d3 js - loading json without a http get 【发布时间】:2012-06-11 16:29:18 【问题描述】:

我正在学习 d3。 d3 js中有certain ways of loading the data。但他们似乎都做了一个 HTTP GET。在我的场景中,我已经在字符串中有 json 数据。如何使用此字符串而不是发出另一个 http 请求?我试图为此寻找文档,但没有找到。

这行得通:

d3.json("/path/flare.json", function(json) 
    //rendering logic here

现在,如果我有:

//assume this json comes from a server (on SAME DOMAIN)
var myjson = '"name": "flare","children": ["name": "analytics","children": ["name": "cluster","children": ["name": "MergeEdge", "size": 10 ]]]'; 

如何在 d3 中使用已计算的“myjson”并避免对服务器的异步调用?谢谢。

【问题讨论】:

你想用这个对象做什么?另外,为什么要将其硬编码为字符串而不是纯 javascript 对象? @Pointy 服务器在响应中将其作为模型属性返回。所以我有字符串。例如,我拥有的 json 对应于 mbostock.github.com/d3/ex/bubble.html 中的代码,这就是其中的逻辑 另见***.com/questions/20940854/… 【参考方案1】:

只需将d3.json 调用替换为

json = JSON.parse( myjson );

IE:

var myjson = '"name": "flare","children": ["name": "analytics","children": ["name": "cluster","children": ["name": "MergeEdge", "size": 10 ]]]';

// d3.json("/path/flare.json", function(json)  #delete this line

    json = JSON.parse( myjson ); //add this line

    //rendering logic here

// #delete this line

更新 09/2013

原始代码已更改。所以 varname json 应该是 root:

// d3.json("flare.json", function(error, root)  #delete this line

    root = JSON.parse( myjson ); //add this line

    //rendering logic here

// #delete this line

【讨论】:

得到了那部分。你能告诉我如何使用这个解析的 'json' 对象来呈现图形(不发出 GET 请求)在这里找到 mbostock.github.com/d3/ex/bubble.html 该示例使用 d3.json("../data/flare.json" , function(json) 进行 http 调用。任何指向文档/示例的指针也会有所帮助。谢谢。 @Ravi 将14 行替换为json = JSON.parse( myjson ); 并删除33 行。试试看 试过了。工作完美!现在我知道发生了什么...谢谢! 谢谢,我也遇到过类似情况。当然现在它可以工作了,但你的指导很有帮助,因为我仍然对 d3 有所了解。 等等,变量 json 究竟是如何传递给 d3 库的?你能解释一下这里发生了什么吗?【参考方案2】:

chumkiu 的回答对我来说非常有用,但需要进行一些调整 - 在最新版本的 d3 气泡图中,您需要定义 root 而不是 json,如

 root = JSON.parse( myjson );

当然,您也可以在其余代码中将“root”替换为“json”。 :-)

对于任何回答有关使用本地数据集的 d3 节点链接树的问题的人,这个答案对我来说非常有用 - 非常感谢此页面上的贡献者。

【讨论】:

【参考方案3】:

根据这个例子:

http://phrogz.net/JS/d3-playground/#StockPrice_HTML

这里他们将图形数据存储在变量 $data 中,并通过 .data($data) 函数进行设置。

我会将此方法应用于您正在使用的任何图表。

【讨论】:

这可能有效;他们在这里有一个类似的例子:github.com/mbostock/d3/wiki/Selections#wiki-data

以上是关于d3 js - 在没有 http get 的情况下加载 json的主要内容,如果未能解决你的问题,请参考以下文章

在渲染 D3.js 图之前从 GET 请求中获取数据

D3.js JSON数据到线图

相当于 D3.js 的 Python

D3.js 不更新数据

D3.js 入门系列 — 11 入门总结

map.get() 方法不适用于 D3 v6