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

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

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

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

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

Ответы [ 25 ]

0 голосов
/ 13 августа 2018

Анализ строки json с помощью JSON.parse (), и данные становятся объектом JavaScript.

JSON.parse(jsonString)

Здесь JSON представляет для обработки набора данных json.

Пример, Представьте, что мы получили этот текст с веб-сервера:

'{ "name":"John", "age":30, "city":"New York"}'

Чтобы разобрать объект json:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

Здесь obj - это соответствующий объект JSON, который выглядит следующим образом.

{ "name":"John", "age":30, "city":"New York"}

Для получения значения используется. Пример оператора:

obj.name // John
obj.age //30

Чтобы передать наоборот, Преобразуйте объект JavaScript в строку с помощью JSON.stringify ().

0 голосов
/ 30 мая 2018

Попробуйте это. Это написано в машинописном тексте.

         export function safeJsonParse(str: string) {
               try {
                 return JSON.parse(str);
                   } catch (e) {
                 return str;
                 }
           }
0 голосов
/ 11 мая 2018

Если ваш JavaScript находится в Mootools , JSON.parse будет анонимным для Framework.
Допустимый синтаксис для безопасного превращения строки JSON в объект должно быть:

var object = JSON.decode(string[, secure]);

Более того, JSON Request может поднять объект, который может анализировать напрямую.
Вы можете посмотреть, как получится json raw data здесь:

http://jsfiddle.net/chetabahana/qbx9b5pm/

0 голосов
/ 19 февраля 2018

Старый вопрос, я знаю, однако никто не замечает этого решения, используя new Function(), анонимную функцию, которая возвращает данные.


Просто пример:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

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

Я использую это для простой и быстрой «компиляции» настроек конфигурации элементов DOM (например, атрибута данных).

0 голосов
/ 26 июля 2017

Вы также можете использовать функцию reviver для фильтрации.

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

для получения дополнительной информации читайте JSON.parse

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