在变量中存储 JSON 数据时出错

Error when storing JSON data in variable

我是jsond3的新手,可能是菜鸟犯的错误。 我正在尝试将 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
      }
   }
}