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

时间:2015-01-16 09:39:41

标签: javascript json d3.js

我是jsond3的新手,这可能是一个新手的错误。 我试图将json数据存储在变量中,但它会给出意外的令牌错误。

这是我的代码,我正在解析和存储数据 -

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}]
 }

提前致谢

4 个答案:

答案 0 :(得分:1)

看起来你是在引用节点和链接中的双引号。试试这个

"nodes":[{"name":"17925","group":6},{"name":"20209","group":215}]
"links"[{"source":0,"target":98,"value":1},{"source":0,"target":108,"value":2}]

答案 1 :(得分:0)

d3.json method已经为您解析了JSON:

  

"使用两个参数调用回调:错误(如果有)和   解析的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}]
}

附注:该方法是异步的,因此稍后在数据到达时将调用回调函数。您已在呼叫之外声明了变量,但它们在呼叫后不会立即包含数据。

答案 2 :(得分:0)

您的JSON文件无效,这就是为什么JSON.parse无法正常工作。

有效的JSON文件就是这样(在这种情况下,1和2是ID)。

{
   "nodes":{
      "1":{
         "name":"17925",
         "group":6
      },
      "2":{
         "name":"20209",
         "group":215
      }
   }
}

答案 3 :(得分:-1)

字符串值中的双引号应该被转义;根据{{​​3}},"JSONEscapeCharacter

  

JSONEscapeCharacter ::中的一个   " / \ 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
        }
    ]
}