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

Does d3.json() and JSON.parse() produce the same results?

本文关键字:json 结果 parse d3      更新时间:2023-09-26

从加载外部JSON文件到使用本地JSON字符串,我遇到了一个问题。起初,d3.json()似乎返回了与我在$.getJSON()中使用json.parse()获得的json数组相同的json数组,尽管它们看起来很相似,但看起来d3.json在我的json数据中添加了一个"ID"变量。在D3中构造Sankey图时,这一点似乎非常重要。此外,使用完全相同的数据,使用$.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中?

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

JSON.parse()做其他事情。它获取一个看起来像JSON的字符串,并将其解析为类似JSON的javascript对象。

两者都不会向生成的数据中添加任何内容,例如id参数。id必须在您正在加载/解析的数据中。

在生成id时可能发生的一件事是,您成功地加载/解析了数据,然后将其传递给添加了id道具的另一个函数。在这种情况下,你甚至可能会因为Chrome的console.log允许你扩展你记录的任何对象而感到困惑。问题是,即使在其他函数向对象添加id道具之前,您对对象进行了console.log操作,但当您单击展开它时,它已经在那里并出现了。