d3.json()和JSON.parse()会产生相同的结果吗?

时间:2016-07-22 18:18:22

标签: javascript json d3.js

我遇到了从加载外部JSON文件到使用本地json字符串的问题。起初,似乎d3.json()返回了我在$ .getJSON()中使用JSON.parse()获得的相同JSON数组,尽管虽然它们看起来很相似,但看起来d3.json添加了“ ID“我的JSON数据变量。在构建Sankey Graph in D3时,这似乎非常重要。此外,使用完全相同的数据,使用$ .getJSON()和JSON.parse(),此ID元素不会出现在完全相同的输出调用中。 D3是否故意在其数据中添加“ID”元素?如何使用JSON.parse()获得相同的结果?

在视觉上,console.log(mygraph)调用的输出显示为:

    Object {source: Object, target: Object, value: "0", path: "path#0", dy: 0}
    dy:0
    id:0
    path:"path#3"
    source:Object
    sy:0
    target:Object
    ty:0
    value:"0"
    __proto__:Object

但是,使用console.log(mygraph)调用的后一种方法看起来像:

    Object {source: Object, target: Object, value: "0", path: "path#0", dy: 0}
    dy:0
    path:"path#3"
    source:Object
    sy:0
    target:Object
    ty:0
    value:"0"
    __proto__:Object

这个“ID”到底是什么?如何使用后一种方法获得它?实际上,如何将本地JSON变量加载到D3?

1 个答案:

答案 0 :(得分:1)

d3.json()$.getJSON()类似,因为它将url字符串作为第一个参数,以及将数据作为第二个参数加载时调用的函数。

JSON.parse()做了其他事情。它需要一个看起来像JSON的字符串,并将其解析为json等javascript对象。

任何人都不会在其生成的数据中添加任何内容,例如id param。 <{1}}必须在您正在加载/解析的数据中。

生成id可能发生的一件事是您成功加载/解析了数据,然后将其传递给添加了id道具的另一个函数。在这种情况下,甚至可能有些混乱发生在Chrome的id允许您展开您记录的任何对象的方式上。问题是,即使你console.log'编辑了你的对象,在其他函数添加了console.log道具之前,按照你点击展开它的时间,它已经存在并出现了。