2010-09-15 2 views
2

У меня сломанная веб-служба, которую я не могу получить и изменить. Он отправляет некоторые в основном приятные JSON, но одним из атрибутов является вложенный объект JSON, который отправляется вниз как строка.Как я могу правильно интерпретировать объект JSON, полученный как строку?

http://www.ireland.com/api/getitemweb/185213
CustomJsonData в ответе от вышеуказанного URL-адреса является примером.

Мой вопрос в том, как я могу интерпретировать строку CustomJsonData как объект?

Я думал, что «злой» eval() может это сделать, но не повезло.

Спасибо, Denis

ответ

6

Если вы используете eval, вам нужно добавить (и) строку до ev аль:

var parsedObject = eval("(" + jsonString + ")"); 

Однако, как вы сказали, Eval зло, используя parseJson из JQuery лучше (и дополнительные круглые скобки не обязательно):

var parsedObject = Jquery.parseJSON(jsonString); 

Документация JQuery parseJSON: http://api.jquery.com/jQuery.parseJSON/

+0

Это вариант для меня сейчас, поскольку я надеюсь, что служба будет исправлена ​​в ближайшие дни. Если это не я, я буду очищать его и использовать предложение SimpleCoders, поскольку jQuery не является вариантом для меня в этом приложении. Спасибо, парни. –

+0

Eval не злой, как дрель не убивает только потому, что он рифмуется. Научитесь использовать JS, это инструмент. –

+0

Я сделал то же самое, а затем я прошел parsedObject в качестве источника для автозаполнения jquery, не сделал ли я что-то не так? – 2013-10-07 21:33:55

0

Вам нужно проанализировать данные дважды - один раз, чтобы проанализировать всю строку API JSON и один раз, чтобы проанализировать пользовательскую строку JSON.

function parseJSON(data) { 
    return JSON ? JSON.parse(data) : eval('(' + data + ')'); 
} 

var data = parseJSON(apiStr); 
var custom = parseJSON(data.CustomJsonData); 
+0

Обратите внимание, что из-за хитроумного бита дизайна допустимо, чтобы строка нечеткой строки Unicode заканчивалась символами U + 2028 и U + 2029 в строковом литерале JSON, re недействителен в строковом литерале JavaScript. Поэтому для обеспечения безопасности вы должны заменить '' \ u2028'' на '' \\ u2028'' и то же самое для U + 2029, прежде чем обернуть в скобки и 'eval'ing. – bobince

Смежные вопросы