Учитывая строку данных JSON, как я могу безопасно превратить эту строку в объект JavaScript?
Очевидно, что я могу сделать это небезопасно с чем-то вроде:
var obj = eval("(" + json + ')');
но это делает меня уязвимым для строки JSON, содержащей другой код, который кажется очень опасным для простой оценки.
javascript
json
Мэтт Шеппард
источник
источник
eval
для анализа строки JSON, потому что вы подвергаете свой код «внедрению кода». ИспользуйтеJSON.parse(yourString)
вместо этого.Ответы:
JSON.parse(jsonString)
это чистый подход JavaScript, если вы можете гарантировать достаточно современный браузер.источник
Requires document to be in IE8+ standards mode to work in IE8.
Метод jQuery устарел. Используйте этот метод вместо:
Исходный ответ с использованием устаревшей функциональности jQuery :
Если вы используете jQuery, просто используйте:
Это именно то, что вы ищете (см. Документацию jQuery ).
источник
jQuery.parseJSON
по умолчанию используется,JSON.parse
если он существует, поэтому единственная причина использовать это по сравнению с реальной - это если вам нужен запасной вариант для <IE7. В jQuery 1.6 это было изменено: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSONЭтот ответ для IE <7, для современных браузеров проверьте ответ Джонатана выше.
Этот ответ устарел, и ответ Джонатана выше (
JSON.parse(jsonString)
) теперь является лучшим ответом .JSON.org имеет парсеры JSON для многих языков, включая четыре различных для JavaScript. Я считаю, что большинство людей считают json2.js своей реализацией.
источник
Используйте простой пример кода в " JSON.parse () ":
и наоборот:
источник
Я не уверен насчет других способов сделать это, но вот как вы это делаете в Prototype (учебник по JSON) .
Вызов
evalJSON()
с истиной в качестве аргумента дезинфицирует входящую строку.источник
Это, кажется, проблема:
Ввод, полученный через веб-сокет Ajax и т. Д., И он будет в формате String, но вам необходимо знать, так ли это
JSON.parsable
. Двойным является то, что, если вы всегда запускаете егоJSON.parse
, программа МОЖЕТ продолжаться «успешно», но вы все равно увидите ошибку, выданную в консоли с ужасом"Error: unexpected token 'x'"
.источник
(function(){ postCookiesToHostileServer(); }());
то еще более неприятное в контексте Node.Если вы используете jQuery , вы также можете использовать:
Тогда вы можете делать такие вещи, как
и т.п.
источник
Обратному вызову передаются возвращенные данные, которые будут объектом или массивом JavaScript, как определено структурой JSON, и проанализированы с использованием
$.parseJSON()
метода.источник
Просто для удовольствия, вот способ использования функции:
источник
eval
и не безопасно. : Peval
но его сложнее и труднее понять сопровождающим.Использование
JSON.parse
, вероятно, лучший способ.Вот пример живой демонстрации .
источник
Самый простой способ с использованием
parse()
метода:Затем вы можете получить значения элементов JSON, например:
Используя jQuery, как описано в
jQuery.parseJSON()
документации:источник
Попробуйте использовать метод с этим объектом данных. например:
Data='{result:true,count:1}
'Этот метод действительно помогает в Nodejs, когда вы работаете с программированием последовательного порта
источник
eval
илиFunction
в равной степени уязвимыйundefined; function bye() {...} bye();
Я нашел «лучший» способ:
В CoffeeScript:
В Javascript:
источник
Разбор JSON - это всегда боль. Если ввод не такой, как ожидалось, он выдает ошибку и вылетает, что вы делаете.
Вы можете использовать следующую крошечную функцию для безопасного анализа вашего ввода. Он всегда поворачивает объект, даже если ввод недействителен или уже является объектом, что лучше для большинства случаев:
источник
Object.prototype.toString.call(input) === '[object Object]'
должно бытьtypeof input === 'object'
ИМОnull
случай раньше, и массив является объектом. Если вы хотите проверить это, вы можете использоватьinstanceof
. Более того, если вы дадите этой функции значение anArray
, она будет ловить иreturn def
тогда, когда она могла бы вернуть совершенно точный массив.toString()
метод, чтобы проверить, является ли переменная объектом или нет. Смотрите AngularJS , jQuery , Underscore или даже разработчиковjson.parse превратится в объект.
источник
Если у нас есть такая строка:
тогда мы можем просто использовать
JSON.parse
дважды, чтобы преобразовать эту строку в объект JSON:И мы можем извлечь значения из объекта JSON, используя:
Результатом будет:
источник
JSON.parse()
преобразует любую строку JSON, переданную в функцию, в объект JSON.Чтобы лучше это понять, нажмите, F12чтобы открыть «Проверка элемента» в браузере и перейти к консоли, чтобы написать следующие команды:
Теперь запустите команду:
Вы получите вывод как объект
{result: true, count: 1}
.Чтобы использовать этот объект, вы можете присвоить его переменной, возможно,
obj
:Используя
obj
и точку (.
оператор ), вы можете получить доступ к свойствам объекта JSON.Попробуйте запустить команду:
источник
Официальная документация :
JSON.parse()
Метод анализирует строку JSON, конструируя значение JavaScript или объект , описанный в строке.reviver
Может быть предоставлена необязательная функция для выполнения преобразования результирующего объекта перед его возвращением.Синтаксис:
Параметры:
text
: Строка для анализа в формате JSON. См. Объект JSON для описания синтаксиса JSON.reviver (optional)
: Если функция, это предписывает, как значение, первоначально произведенное синтаксическим анализом, преобразовано, прежде чем будет возвращено.Возвращаемое значение
Объект, соответствующий заданному тексту JSON.
Исключения
Выдает исключение SyntaxError, если строка для анализа недопустима в формате JSON.
источник
Преобразование объекта в JSON, а затем его разбор работает для меня, например:
источник
Синтаксически проанализируйте строку JSON
JSON.parse()
, и данные станут объектом JavaScript:Здесь JSON представляет для обработки набора данных JSON.
Представьте, что мы получили этот текст с веб-сервера:
Для анализа в объект JSON:
Вот
obj
соответствующий объект JSON, который выглядит следующим образом:Чтобы получить значение, используйте
.
оператор:Преобразуйте объект JavaScript в строку с помощью
JSON.stringify()
.источник
Просто на разбор обложки для разных типов ввода
Выполните синтаксический анализ данных с помощью JSON.parse (), и данные станут объектом JavaScript.
При использовании JSON.parse () в JSON, производном от массива, метод возвращает массив JavaScript вместо объекта JavaScript.
Объекты даты не допускаются в JSON. Для Даты сделать что-то вроде этого
Функции не допускаются в JSON. Если вам нужно включить функцию, напишите ее в виде строки.
источник
Я знаю, что это более старый вопрос, однако никто не замечает этого решения, используя
new Function()
анонимную функцию, которая возвращает данные.Просто пример:
Это немного более безопасно, потому что он выполняется внутри функции и не компилируется в вашем коде напрямую. Поэтому, если внутри него есть объявление функции, оно не будет привязано к объекту окна по умолчанию.
Я использую это для простой и быстрой «компиляции» настроек конфигурации элементов DOM (например, атрибута данных).
источник
Резюме:
Javascript (как браузер, так и NodeJS) имеют встроенный
JSON
объект. На этом объекте есть 2 удобных способа борьбы сJSON
. Они следующие:JSON.parse()
принимаетJSON
качестве аргумента, возвращает объект JSJSON.stringify()
Принимает объект JS в качестве аргумента, возвращаетJSON
объектДругие приложения:
К тому же для очень удобного обращения с
JSON
ними можно использовать другие средства. Сочетание обоихJSON
методов позволяет очень легко сделать глубокие клоны массивов или объектов. Например:источник
Вы также можете использовать
reviver
функцию для фильтрации.Для получения дополнительной информации читайте
JSON.parse
.источник
JSON.parse - это правильный способ преобразования строки в объект, но если анализируемая строка не является объектом или строка неверна, она выдаст ошибку, которая приведет к разрыву остальной части кода, поэтому идеально подходит для переноса функции JSON.parse внутри try-catch
источник
Попробуйте это. Это написано в машинописи.
источник
JSON.parse()
?источник