在变量中存储 JSON 数据时出错
Error when storing JSON data in variable
我是json
和d3
的新手,可能是菜鸟犯的错误。
我正在尝试将 json 数据存储在变量中,但它给出了意外的标记 u 错误。
这是我解析和存储数据的代码 -
var links = [];
var nodes = [];
var data;
d3.json("sample1.json", function(error, data) {
nodes = JSON.parse(data).nodes;
links = JSON.parse(data).links;
});
json 文件是这样的-
{
"nodes":[
{""name"":""17925"",""group"":6},
{""name"":""20209"",""group"":215}]
"links"[
{""source"":0,""target"":98,""value"":1},
{""source"":0,""target"":108,""value"":2}]
}
提前致谢
您似乎在双引号节点和链接中的值。试试这个
"nodes":[{"name":"17925","group":6},{"name":"20209","group":215}]
"links"[{"source":0,"target":98,"value":1},{"source":0,"target":108,"value":2}]
应转义字符串值中的双引号;根据 the specs,"
是 JSONEscapeCharacter
:
JSONEscapeCharacter :: one of
" / \ b f n r t
此外,您似乎在 links
属性 键后遗漏了一个冒号 (:
)。
这将通过解析:
{
"nodes": [
{
"\"name\"": "\"17925\"",
"\"group\"": 6
},
{
"\"name\"": "\"20209\"",
"\"group\"": 215
}
],
"links": [
{
"\"source\"": 0,
"\"target\"": 98,
"\"value\"": 1
},
{
"\"source\"": 0,
"\"target\"": 108,
"\"value\"": 2
}
]
}
d3.json
method 已经为您解析了 JSON:
"the callback is invoked with two arguments: the error, if any, and
the parsed JSON."
因此,您不必再次解析它:
var links, nodes;
d3.json("sample1.json", function(error, data) {
nodes = data.nodes;
links = data.links;
});
正如 roryok 指出的那样,JSON 有双引号。此外,它缺少属性周围的对象说明符,它应该是:
{
"nodes":[{"name":"17925","group":6},{"name":"20209","group":215}]
"links"[{"source":0,"target":98,"value":1},{"source":0,"target":108,"value":2}]
}
旁注:该方法是异步的,因此回调函数将在稍后数据到达时调用。您已在调用外声明了变量,但它们不会在调用后立即包含数据。
您的 JSON 文件无效,这就是 JSON.parse 无法工作的原因。
一个有效的 JSON 文件应该是这个(在这种情况下 1 和 2 是 ID)。
{
"nodes":{
"1":{
"name":"17925",
"group":6
},
"2":{
"name":"20209",
"group":215
}
}
}
我是json
和d3
的新手,可能是菜鸟犯的错误。
我正在尝试将 json 数据存储在变量中,但它给出了意外的标记 u 错误。
这是我解析和存储数据的代码 -
var links = [];
var nodes = [];
var data;
d3.json("sample1.json", function(error, data) {
nodes = JSON.parse(data).nodes;
links = JSON.parse(data).links;
});
json 文件是这样的-
{
"nodes":[
{""name"":""17925"",""group"":6},
{""name"":""20209"",""group"":215}]
"links"[
{""source"":0,""target"":98,""value"":1},
{""source"":0,""target"":108,""value"":2}]
}
提前致谢
您似乎在双引号节点和链接中的值。试试这个
"nodes":[{"name":"17925","group":6},{"name":"20209","group":215}]
"links"[{"source":0,"target":98,"value":1},{"source":0,"target":108,"value":2}]
应转义字符串值中的双引号;根据 the specs,"
是 JSONEscapeCharacter
:
JSONEscapeCharacter :: one of
" / \ b f n r t
此外,您似乎在 links
属性 键后遗漏了一个冒号 (:
)。
这将通过解析:
{
"nodes": [
{
"\"name\"": "\"17925\"",
"\"group\"": 6
},
{
"\"name\"": "\"20209\"",
"\"group\"": 215
}
],
"links": [
{
"\"source\"": 0,
"\"target\"": 98,
"\"value\"": 1
},
{
"\"source\"": 0,
"\"target\"": 108,
"\"value\"": 2
}
]
}
d3.json
method 已经为您解析了 JSON:
"the callback is invoked with two arguments: the error, if any, and the parsed JSON."
因此,您不必再次解析它:
var links, nodes;
d3.json("sample1.json", function(error, data) {
nodes = data.nodes;
links = data.links;
});
正如 roryok 指出的那样,JSON 有双引号。此外,它缺少属性周围的对象说明符,它应该是:
{
"nodes":[{"name":"17925","group":6},{"name":"20209","group":215}]
"links"[{"source":0,"target":98,"value":1},{"source":0,"target":108,"value":2}]
}
旁注:该方法是异步的,因此回调函数将在稍后数据到达时调用。您已在调用外声明了变量,但它们不会在调用后立即包含数据。
您的 JSON 文件无效,这就是 JSON.parse 无法工作的原因。
一个有效的 JSON 文件应该是这个(在这种情况下 1 和 2 是 ID)。
{
"nodes":{
"1":{
"name":"17925",
"group":6
},
"2":{
"name":"20209",
"group":215
}
}
}