Ответ 1
JSON.parse(jsonString)
- это чистый подход к JavaScript, если вы можете гарантировать разумно современный браузер.
С учетом строки данных JSON, как вы можете безопасно превратить эту строку в объект JavaScript?
Очевидно, что вы можете сделать это небезопасно с чем-то вроде...
var obj = eval("(" + json + ')');
... но это оставляет нас уязвимыми для строки json, содержащей другой код, что кажется очень опасным для простого eval.
JSON.parse(jsonString)
- это чистый подход к JavaScript, если вы можете гарантировать разумно современный браузер.
Метод jQuery теперь устарел. Вместо этого используйте этот метод:
let jsonObject = JSON.parse(jsonString);
Оригинальный ответ с использованием устаревшей функции jQuery:
Если вы используете jQuery, просто используйте:
jQuery.parseJSON( jsonString );
Это именно то, что вы ищете (см. документацию jQuery ).
Изменение: этот ответ предназначен для IE <7, для современных браузеров проверьте ответ Джонатана выше.
Изменение: этот ответ устарел, и Джонатан ответил выше (JSON.parse(jsonString)
) теперь лучший ответ.
JSON.org имеет парсер JSON для многих языков, включая 4 разных для Javascript. Я считаю, что большинство людей будут рассматривать json2.js их реализацию goto.
Используйте простой код, представленный в следующей ссылке в MSDN.
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
и наоборот
var str = JSON.stringify(arr);
Я не уверен в других способах этого делать, но вот как вы это делаете в Prototype (учебное пособие JSON).
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Вызов evalJSON() с true, поскольку аргумент дезинфицирует входящую строку.
Кажется, это проблема:
Вход получен, через ajax websocket и т.д., и он всегда будет в формате String, но вам нужно знать, является ли это JSON.parsable. Touble - это то, что если вы всегда запускаете его через JSON.parse, программа МОЖЕТ продолжить "успешно", но вы все равно увидите ошибку, выброшенную в консоли с ужасным "Ошибка: неожиданный токен" x ".
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))()
Попробуйте использовать метод с этим объектом Data. ex: Data='{result:true,count: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_sans_eval некоторое время. По словам его автора, он более безопасен, чем json2.js.
Использование JSON.parse, вероятно, лучший способ. Вот пример живая демонстрация
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.parse изменится на объект.
Разбор 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))
JSON.parse() преобразует любую строку JSON, переданную в функцию, в объект JSON.
Для лучшего понимания нажмите F12, чтобы открыть Inspect Element своего браузера и перейти к консоли, чтобы написать следующие команды: -
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));
вы получите результат как Object {result: true, count: 1}.
Чтобы использовать этот объект, вы можете назначить его переменной let say obj: -
var obj = JSON.parse(response);
Теперь, используя оператор obj и dot (.), вы можете получить доступ к свойствам объекта JSON.
Попробуйте выполнить команду
console.log(obj.result);
Официально задокументировано:
Метод JSON.parse()
анализирует строку JSON, JSON.parse()
значение или объект JavaScript, описанные в строке. Для выполнения преобразования на результирующий объект перед его reviver
может быть предоставлена дополнительная функция reviver
.
Синтаксис
JSON.parse(text[, reviver])
параметры
текст
Строка для синтаксического анализа как JSON. См. Объект JSON для описания синтаксиса JSON.
reviver (необязательно)
Если функция, это предписывает, как значение, первоначально созданное путем синтаксического анализа, преобразуется перед возвратом.
Возвращаемое значение
Объект, соответствующий данному тексту JSON.
Исключения
Выдает исключение SyntaxError, если строка для разбора недействительна JSON.
JS Guru Douglas Crockford написал функцию parseJSON, которую вы скачать здесь
Вы также можете использовать функцию reviver
для фильтрации.
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
для получения дополнительной информации прочитайте JSON.parse
Более старый вопрос, я знаю, однако никто не замечает этого решения, используя 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 (например, атрибута данных) простым и быстрым.
Попробуйте это. Этот текст написан в машинописном тексте.
export function safeJsonParse(str: string) {
try {
return JSON.parse(str);
} catch (e) {
return str;
}
}
Разделите строку 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().
Javascript (как браузер, так и NodeJS) имеет встроенный объект JSON
. На этом объекте есть два удобных метода работы с JSON
. Они следующие:
JSON.parse()
Принимает JSON
качестве аргумента, возвращает объект JSJSON.stringify()
Принимает объект JS, поскольку аргумент возвращает объект JSON
Кроме того, для очень удобного использования JSON
они могут использоваться для других средств. Комбинация обоих методов JSON
позволяет нам очень легко сделать глубокие клоны массивов или объектов. Например:
let arr1 = [1, 2, [3 ,4]];
let newArr = arr1.slice();
arr1[2][0] = 'changed';
console.log(newArr); // not a deep clone
let arr2 = [1, 2, [3 ,4]];
let newArrDeepclone = JSON.parse(JSON.stringify(arr2));
arr2[2][0] = 'changed';
console.log(newArrDeepclone); // A deep clone, values unchanged
Если ваш JavaScript находится в Mootools, JSON.parse
будет анонимным с помощью Framework.
Правильный синтаксис для безопасного превращения строки JSON в объект должен быть:
var object = JSON.decode(string[, secure]);
Кроме того, JSON Request
может поднять объект, который может анализировать напрямую.
Вы можете cek как это сделать json сырые данные здесь: