2015-01-16 4 views
-1

Я новичок в json и d3, это может быть ошибка новобранец. Я пытаюсь сохранить данные json в переменной, но это дает непредвиденную ошибку маркера u.Ошибка при хранении данных 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}] 
} 

Заранее спасибо

+0

Если JSON действительно так, как вы показать его здесь, проверить скрипт, который генерирует его, двойные кавычки действительно неправильно – MightyPork

+0

Исправленный скрипт, который был генерации JSON. Теперь JSON в порядке. Теперь я получаю неожиданный знак ошибки. –

+0

@SoniShashank: Это потому, что JSON анализируется дважды. Второй раз он превратит объект в строку '' [object Object] "' ​​и попытается проанализировать это как JSON. – Guffa

ответ

0

d3.json method уже разбирает JSON для вас:

«обратного вызова вызывается с двумя аргументами: ошибки, если таковые имеются, и разобранный JSON «.

Таким образом, вы не должны разобрать его снова:

var links, nodes; 

d3.json("sample1.json", function(error, data) { 
    nodes = data.nodes; 
    links = data.links; 
}); 

Как roryok указывалось, JSON имеет двойные знаки qoutation. Кроме того, отсутствует объект спецификатор вокруг свойств, оно должно быть:

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

Side Примечание: Этот метод асинхронно, поэтому функция обратного вызова будет вызываться позже, когда данные поступают. Вы указали переменные вне вызова, но они не будут содержать данные сразу после вызова.

1

Похоже, вы дважды процитировать значения в узлах и ссылках. Попробуйте это вместо

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

Исправил скрипт, который генерировал JSON. Теперь JSON в порядке. Теперь я получаю неожиданный знак ошибки. –

+0

Я бы предположил, может быть, вы нажмете o вместо 0? – roryok

-1

Двойные кавычки внутри строковых значений должны быть экранированы; По the specs, " является 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 
     } 
    ] 
} 
0

Ваши файлы JSON недействительны, поэтому JSON.parse не будет работать.

Действительный файл JSON будет таким (1 и 2 являются идентификаторами в этом случае).

{ 
    "nodes":{ 
     "1":{ 
     "name":"17925", 
     "group":6 
     }, 
     "2":{ 
     "name":"20209", 
     "group":215 
     } 
    } 
} 
Смежные вопросы