Синтаксический анализ ответа JSON - PullRequest
1 голос
/ 03 марта 2011

Я получил ответ JSON в формате ..

{"item":{"cid":544,"id":3023,"name":"names"},"success":1,"msg":""}

Ответ сохраняется как s.Когда я делаю ...

var obj = eval('('+s+')');

obj = undefined. поэтому obj.name = undefined

Я хочу получить id и name из этого ответа JSON.Почему то, что я делаю, не работает?Как мне «заставить это работать»?

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

eval не рекомендуется (с точки зрения безопасности), используйте анализатор JSON:

var obj = JSON.parse(result);

или убедитесь, что он работает, даже если в браузере нет анализатора JSON:

var obj = typeof JSON !='undefined' ?  JSON.parse(result) : eval('('+result+')');

Это, однако, не рекомендуется, и в этом случае вы должны предпочесть включить альтернативную библиотеку JSON, как рекомендуется в комментариях к этому ответу (см. json.org ).

Тогда вы можете сделать:

var id = obj.item.cid;
var name = obj.item.name;
0 голосов
/ 03 марта 2011

Используйте стандартный способ анализа JSON и используйте подходящую библиотеку для заполнения пробелов в старых браузерах, например https://github.com/douglascrockford/JSON-js

Загрузите json.js и добавьте ссылку на него на свою страницу, используя<script> тег.Сценарий автоматически предоставит необходимые методы JSON, если ваш браузер этого еще не сделал.

var object = JSON.parse(yourJSONString);

Eval не рекомендуется, и вы можете даже назвать его запрещенным, чтобы использовать его для анализа JSON.По той простой причине, что любой Javascript внутри строки будет оценен и позволит внедрить код.eval на любом языке опасен и, конечно, не должен использоваться, если есть вероятность, что ввод небезопасен.

0 голосов
/ 03 марта 2011

Оцените все назначение вместо.

var obj;
eval('obj = ('+s+')');
console.log(obj.item.name);

Или используйте json2 вместо.

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