Безопасное превращение строки JSON в объект - PullRequest
1251 голосов
/ 05 сентября 2008

Учитывая строку данных JSON, как вы можете безопасно превратить эту строку в объект JavaScript?

Очевидно, что вы можете сделать это небезопасно с чем-то вроде ...

var obj = eval("(" + json + ')');

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

Ответы [ 25 ]

1850 голосов
/ 16 апреля 2011

JSON.parse(jsonString) - это чистый подход JavaScript, если вы можете гарантировать достаточно современный браузер.

867 голосов
/ 02 сентября 2010

Метод jQuery устарел. Используйте этот метод вместо:

let jsonObject = JSON.parse(jsonString);

Оригинальный ответ с использованием устаревшей функциональности jQuery :

Если вы используете jQuery, просто используйте:

jQuery.parseJSON( jsonString );

Это именно то, что вы ищете (см. Документацию jQuery ).

151 голосов
/ 05 сентября 2008

Редактировать: Этот ответ для IE <7, для современных браузеров проверьте ответ Джонатана выше. </strong>

Изменить: Этот ответ устарел, и Ответ Джонатана выше (JSON.parse(jsonString)) теперь лучший ответ .

JSON.org имеет парсеры JSON для многих языков, включая 4 различных для Javascript. Я считаю, что большинство людей считают json2.js их реализацией goto.

68 голосов
/ 16 декабря 2013

Используйте простой код, представленный в следующей ссылке на MSDN .

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

и наоборот

var str = JSON.stringify(arr);
20 голосов
/ 05 сентября 2008

Я не уверен насчет других способов сделать это, но вот как вы это делаете в Prototype (учебник JSON) .

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

Вызов evalJSON () с истиной в качестве аргумента очищает входящую строку.

18 голосов
/ 29 апреля 2013

Кажется, это проблема:

Ввод получен через ajax websocket и т. Д., И он всегда будет в формате String - но вам нужно знать, является ли он JSON.parsable. Двойным является то, что если вы всегда запускаете его через JSON.parse, программа МОЖЕТ продолжить «успешно», но вы все равно увидите ошибку, выданную в консоли с страшным «Ошибка: неожиданный токен« x »».

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
14 голосов
/ 24 октября 2008

Если вы используете jQuery , вы также можете просто сделать $.getJSON(url, function(data) { });

Тогда вы можете делать такие вещи, как data.key1.something, data.key1.something_else и т. Д.

12 голосов
/ 06 мая 2010
$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Обратному вызову передаются возвращенные данные, которые будут объектом или массивом JavaScript, как определено структурой JSON, и проанализированы с использованием метода $.parseJSON().

10 голосов
/ 15 октября 2014

Просто для удовольствия, вот способ использования функции:

 jsonObject = (new Function('return ' + jsonFormatData))()
9 голосов
/ 15 июля 2014

Попробуйте использовать метод с этим объектом данных. например: Data='{result:true,count:1}

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

Этот метод действительно помогает в Nodejs, когда вы работаете с программированием последовательного порта

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