Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises
.
Здесь it говорит,
Обещания могут использоваться для отключения асинхронных функций и позволяют объединять несколько функций вместе.
blockquote>Вы можете найти приятное объяснение здесь .
Пример, найденный в docs , упомянутом ниже.
promiseB = promiseA.then( function onSuccess(result) { return result + 1; } ,function onError(err) { //Handle error } ); // promiseB will be resolved immediately after promiseA is resolved // and its value will be the result of promiseA incremented by 1.
Angular2 and Later
In
Angular2
, посмотрите на следующий пример, но его рекомендовал использоватьObservables
сAngular2
.search(term: string) { return this.http .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`) .map((response) => response.json()) .toPromise();
}
Вы можете использовать это таким образом,
search() { this.searchService.search(this.searchField.value) .then((result) => { this.result = result.artists.items; }) .catch((error) => console.error(error)); }
См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.
Кроме того, здесь представлены обещания spec определите здесь.
JSON.parse(jsonString)
- это чистый подход к JavaScript, если вы можете гарантировать разумно современный браузер.
Если вы используете jQuery , вы также можете просто сделать $.getJSON(url, function(data) { });
. Тогда вы можете делать такие вещи, как data.key1.something
, data.key1.something_else
и т. д.
Использование JSON.parse, вероятно, лучший способ. Вот пример live demo
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);
Если ваш JavaScript находится в Mootools , JSON.parse
будет анонимным с помощью Framework. Допустимый синтаксис для безопасного превращения строки JSON в объект должен быть:
var object = JSON.decode(string[, secure]);
Кроме того, JSON Request
может поднять объект, способный самостоятельно анализировать. Вы можете cek, как это сделать json raw data здесь:
Более старый вопрос, я знаю, однако никто не замечает этого решения, используя 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 (например, атрибута данных) простым и быстрым.
Используйте простой код, представленный в следующей ссылке на MSDN .
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
и reverse
var str = JSON.stringify(arr);
Я нашел «лучший» способ:
В 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'
});
Вы также можете использовать функцию reviver
для фильтрации.
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
для получения дополнительной информации см. JSON.parse
Если вы хотите, чтобы этот метод можно было использовать таким образом. Вот объект Data, который вы хотите использовать ex: Data = '{result: true, count: 1}'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
Этот метод действительно помогает в Nodejs Если вы работаете с программированием последовательного порта
Разбираем строку 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"}
Для выбора используемого значения. оператор EXample:
obj.name // John
obj.age //30
Чтобы передать противоположное, преобразуйте объект JavaScript в строку с помощью JSON.stringify ().
Самый простой способ использования метода 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);
Просто для удовольствия, вот как использовать функцию:
jsonObject = (new Function('return ' + jsonFormatData))()
Я не уверен в других способах этого делать, но вот как вы это делаете в Prototype (учебник JSON) .
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Вызов evalJSON () с истинным как аргумент санирует входящую строку.
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}.
Чтобы использовать этот объект, вы можете назначить его переменной, скажем, obj: -
var obj = JSON.parse(response);
Теперь, используя оператор obj и dot (.), Вы можете получить доступ к свойствам объекта JSON.
Попробуйте запустить команду
console.log(obj.result);
Метод jQuery теперь устарел. Вместо этого используйте этот метод:
let jsonObject = JSON.parse(jsonString);
Оригинальный ответ с использованием устаревшей функции jQuery :
Если вы используете jQuery, просто используйте:
jQuery.parseJSON( jsonString );
Преобразование объекта в JSON, а затем его разбор, работает для меня, например:
JSON.parse(JSON.stringify(object))
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_sans_eval . Согласно его автору, он более безопасен, чем json2.js.
Javascript (как браузер, так и NodeJS) имеют встроенный объект JSON
. На этом объекте есть два удобных метода для работы с JSON
. Они следующие:
JSON.parse()
Принимает JSON
в качестве аргумента, возвращает объект JS JSON.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
Изменить: этот ответ для IE & lt; 7, для современных браузеров проверьте ответ Джонатана выше.
Редактирование: этот ответ устарел и Ответ Джонатана выше (JSON.parse(jsonString)
) теперь лучший ответ.
JSON.org имеет парсер JSON для многих языков, включая 4 разных для Javascript. Я считаю, что большинство людей рассмотрят json2.js свою реализацию goto.