Если у вас есть строка данных в формате JSON, как безопасно превратить ее в объект JavaScript?
Очевидно, что это можно сделать небезопасно, используя что-то вроде...
var obj = eval("(" + json + ')');
...но это оставляет нас уязвимыми к тому, что строка json может содержать другой код, который, кажется, очень опасно просто оценивать.
Формат JSON.разобрать(jsonString)
- это чистый JavaScript подход так долго, как вы можете гарантировать достаточно современного браузера.
Метод jQuery является теперь устаревшим. Вместо того, чтобы использовать этот метод:
let jsonObject = JSON.parse(jsonString);
Оригинальный ответ, используя устаревшие функции jQuery:
Если вы'вновь с помощью jQuery, просто использовать:
jQuery.parseJSON( jsonString );
Это'ы именно то, что вы'вновь ищу (см. в jQuery документация).
Правка: Этот ответ для IE < 7, для современных браузеров проверьте ответ Jonathan' выше..
Редактировать: Этот ответ устарел, и Jonathan's answer above (JSON.parse(jsonString)
) теперь является лучшим ответом.
На JSON.org есть парсеры JSON для многих языков, включая 4 различных парсера для Javascript. Я полагаю, что большинство людей сочтут json2.js своей основной реализацией.
Использовать простой код представлен в следующем виде ссылка на MSDN.
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
и обратный
var str = JSON.stringify(arr);
Я не уверен, что есть другие способы сделать это, но вот как это делается в Prototype (JSON tutorial).
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Вызов evalJSON() с true в качестве аргумента дезинфицирует входящую строку.
Это похоже на вопрос:
Вход получил, через AJAX с WebSocket и т. д., И это всегда будет в строковом формате - но вы должны знать, если это является JSON.распознаваемо. Просматриваете небезопасно, что если вы всегда работать через формат JSON.разобрать, программа может продолжить 'успешно' но вы'll по-прежнему вижу ошибку в консоли с ужасной "и ошибка: непредвиденная лексема 'х' что".
var data;
try {
data = JSON.parse(jqxhr.responseText);
} catch (_error) {}
data || (data = {
message: 'Server error, please retry'
});
Если вы используете jQuery, вы также можете просто сделать $.getJSON(url, function(data) { });
.
Тогда вы сможете делать такие вещи, как data.key1.something
, data.key1.something_else
и т.д.
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Обратного вызова передается возвращаемых данных, которые будут JavaScript-объект или массив, как определено в структуре JSON и анализируется с помощью $.метод parseJSON ()
.
Просто для удовольствия, вот как, используя функцию :
jsonObject = (new Function('return ' + jsonFormatData))()
Попробуйте использовать метод с этим объектом данных. экс:сведения='{результат:верно,количество:1}
'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
Этот метод действительно помогает в Nodejs, когда вы работаете с последовательного программирования порт
Самый простой способ, используя метод Parse () метод:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
тогда вы сможете получать значения элементов формат JSON
, например:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
Используя библиотеку jQuery, как описано в документация:
JSON.parse(jsonString);
С помощью JSON.разбор это, наверное, лучший способ. Здесь'ы пример демо
var jsonRes = '{ "students" : [' +
'{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
'{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
'{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);
Я нашел, что "лучше" в сторону:
В CoffeeScript:
try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }
В JavaScript:
var data;
try {
data = JSON.parse(jqxhr.responseText);
} catch (_error) {}
data || (data = {
message: 'Server error, please retry'
});
JSON.parse(jsonString);
в JSON.разбор будет меняться в объект.
Парсинга JSON-это всегда боль в заднице. Если этот вход не как ожидается, он выдает ошибку и вылетает то, что вы делаете. Вы можете использовать следующие крошечной функции, чтобы спокойно разобрать ваш вклад. Он всегда превращает объект, даже если на вход не действителен или уже объект, который является наиболее подходящим для большинства случаев.
JSON.safeParse = function (input, def) {
// Convert null to empty object
if (!input) {
return def || {};
} else if (Object.prototype.toString.call(input) === '[object Object]') {
return input;
}
try {
return JSON.parse(input);
} catch (e) {
return def || {};
}
};
Преобразования объекта в JSON, а затем парсите ее, у меня работает, как:
JSON.parse(JSON.stringify(object))
Если мы имеем такую строку: "{\"\status":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}" тогда мы можем просто использовать JSON.разбирать два раза, чтобы преобразовать эту строку в JSON-объект:
var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)
И просто мы можем извлечь значения из JSON объекта с помощью:
// instead of last JSON.parse:
var { status, token } = JSON.parse(jsonString);
Результат будет:
status = 1 and token = 65b4352b2dfc4957a09add0ce5714059
В JSON.метод Parse() преобразует строку JSON передаются в функцию, в объект JSON.
Для лучшего понимания нажмите клавишу F12, чтобы открыть Просмотр кода элемента в браузере и зайти в консоли написать следующие команды : -
var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.
Теперь выполните команду :-
console.log(JSON.parse(response));
вы'll получить на выходе в качестве объекта {результат: правда, рассчитывать: 1}.
Для того, чтобы использовать этот объект, вы можете присвоить его переменной позвольте'ы сказать, кадриров :-
var obj = JSON.parse(response);
Теперь с помощью obj и точка(.) оператора можно получить доступ к свойствам объекта JSON.
Попробуйте выполнить команду
console.log(obj.result);
Официально документированы:
В формат JSON.метод Parse()
разбирает строку JSON, построения значением JavaScript или объекта, описанного в строку. Необязательный функция Reviver может быть обеспечен для выполнения преобразования на результирующий объект, прежде чем он возвращается.
Синтаксис
JSON.parse(text[, reviver])
Параметры
текст
Разбираемая строка в формате JSON. Видеть объект JSON для описания синтаксиса JSON.
живительная влага (опционально)
Если функция, это предусматривает как стоимость первоначально произведенного разбора преобразуется, прежде, чем быть возвращенным.
Возвращаемое значение
Объект, соответствующий данному текста JSON.
Исключения
Бросает исключение SyntaxError, если в строке не допустимый JSON.
Старше вопрос, я знаю, однако никто не заметил этого решения с помощью функция()
, анонимная функция, которая возвращает данные.
Просто пример:
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-элементов (например, атрибуты) просто и быстро.