Основной вопрос JSON.parse - PullRequest
       26

Основной вопрос JSON.parse

0 голосов
/ 22 сентября 2009

Я не могу получить доступ к своим объектам.

после анализа строки сервера:

var json = JSON.parse(myJsonText):

Я получаю ниже с предупреждением:

alert(json.param1)

{"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
{"ID":64,"Name":"driveways","ParentID":4,"Path":""}

Теперь я пытаюсь получить доступ к идентификатору и имени.

Я пытался:

json.param1[0].ID
json.param1[0]["ID"]
json.param1[0][0]

И многие другие, которые на самом деле не делают много смысл, такой как:

json[0].ID or 
json.param1.ID etc...

Я получаю (например, в случае json.param1 [0] .ID):

param1.0.ID имеет значение null или не является объектом.

Есть идеи?

Ответы [ 5 ]

2 голосов
/ 22 сентября 2009

Попробуйте это

// you already have this bit
var json = JSON.parse(myJsonText);
alert(json.param1);

// add this
var tmp_param1 = JSON.parse(json.param1);
json.param1 = tmp_param1;
alert(json.param1);  // should print [object, object] or similar

alert(json.param1[0].ID);  // should print "17"
alert(json.param1[0].Name);  // should print "swimming pools"
2 голосов
/ 22 сентября 2009

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

2 голосов
/ 22 сентября 2009

Это похоже на недопустимый JSON. Попробуйте заключить его в квадратные скобки, чтобы сделать его допустимым массивом объектов JSON. Затем получите доступ к нему по индексу.

[
    {"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
    {"ID":64,"Name":"driveways","ParentID":4,"Path":""}    
]
1 голос
/ 22 сентября 2009

Чтобы скомпилировать и развернуть все комментарии ...;)


Ваша первая подсказка, что что-то не так, это ваше предупреждение:

alert(json.param1)

Вместо получения:

{"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
{"ID":64,"Name":"driveways","ParentID":4,"Path":""}

Вы должны получить что-то похожее на следующее:

[object],[object]

Попробуйте оповестить сам элемент массива typeof:

alert(typeof json.param1[0]) //=> should say "object"

Если вы получаете что-то кроме "object", либо JSON отформатирован неправильно, либо анализатор не работает.


Один хороший ключ к пониманию того, что неправильно, - это если оригинальный JSON выглядит так:

{"param1" : [
  "{\"ID\":17,\"Name\":\"swimming pools\",\"ParentID\":4,\"Path\":\"\"}",
  "{\"ID\":64,\"Name\":\"driveways\",\"ParentID\":4,\"Path\":\"\"}"
]}

Тогда, вероятно, сломан JSON. (Извините;)

С другой стороны, если ваш JSON выглядит так:

{"param1" : [
  {"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
  {"ID":64,"Name":"driveways","ParentID":4,"Path":""}
]}

Тогда, вероятно, это парсер.

0 голосов
/ 22 сентября 2009

если json.param1 - это то, что вы сказали, тогда json.param1[0].ID должно работать (и оценивать как "17").

Если это не работает, не могли бы вы показать нам текст, который вы анализируете для создания объекта JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...