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

标签 javascript json d3.js

我在从加载外部 JSON 文件转向使用本地 json 字符串时遇到问题。起初,看起来 d3.json() 返回的 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 中?

最佳答案

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

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

两者都不会在其生成的数据中添加诸如 id 参数之类的任何内容。 id 必须位于您正在加载/解析的数据中。

生成 id 时可能发生的一件事是,您成功加载/解析了数据,然后将其传递给添加了 id 属性的另一个函数。在这种情况下,您的一些困惑甚至可能是由于 Chrome 的 console.log 让您扩展所记录的任何对象的方式而产生的。问题是,即使您在其他函数添加 id 属性之前 console.log' 编辑了您的对象,当您单击展开它时,它已经已经在那里并出现了。

关于javascript - d3.json() 和 JSON.parse() 产生相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38532992/

相关文章:

javascript - getBoundingClientRect 返回错误的结果

javascript - 连接服务器时出错: socket io is not defined

javascript - jQuery 代码可以在 Firebug 中运行,但不能单独运行

java - java中XML到JSON的转换

java - 将 JSON 响应转换为 List<T>

javascript - 按 csv 文件的顺序读取列

javascript - 编辑获取响应中的数据

Javascript standardjs - 如何修复 'is already defined' ?

c# - JavascriptSerializer、Deserializer,无法反序列化我的对象

javascript - D3.js 附加 svg/dom 元素不起作用