Как получить JSON из URL в JavaScript?
Этот URL возвращает JSON:
{
query: {
count: 1,
created: "2015-12-09T17:12:09Z",
lang: "en-US",
diagnostics: {},
...
}
}
Я пробовал это, и это не сработало:
responseObj = readJsonFromUrl('http://query.yahooapis.com/v1/publ...');
var count = responseObj.query.count;
console.log(count) // should be 1
Как я могу получить объект JavaScript из этого URL-запроса JSON?
Ответы
Ответ 1
Вы можете использовать функцию jQuery .getJSON()
:
$.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20%2a%20from%20yahoo.finance.quotes%20WHERE%20symbol%3D%27WRC%27&format=json&diagnostics=true&env=store://datatables.org/alltableswithkeys&callback', function(data) {
//data is the JSON string
});
Если вы не хотите использовать jQuery, вы должны посмотреть на этот ответ для чистого решения JS: fooobar.com/questions/75498/...
Ответ 2
Если вы хотите сделать это в простом javascript, вы можете определить такую функцию:
var getJSON = function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function() {
var status = xhr.status;
if (status === 200) {
callback(null, xhr.response);
} else {
callback(status, xhr.response);
}
};
xhr.send();
};
И используйте его следующим образом:
getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20%2a%20from%20yahoo.finance.quotes%20WHERE%20symbol%3D%27WRC%27&format=json&diagnostics=true&env=store://datatables.org/alltableswithkeys&callback',
function(err, data) {
if (err !== null) {
alert('Something went wrong: ' + err);
} else {
alert('Your query count: ' + data.query.count);
}
});
Обратите внимание, что data
- это объект, поэтому вы можете получить доступ к его атрибутам без необходимости его синтаксического анализа.
Ответ 3
С помощью Chrome, Firefox, Safari, Edge и Webview вы можете использовать API извлечения, что значительно упрощает эту задачу и делает ее более лаконичной.
Если вам нужна поддержка IE или более старых браузеров, вы также можете использовать выборку polyfill.
let url = 'https://example.com';
fetch(url)
.then(res => res.json())
.then((out) => {
console.log('Checkout this JSON! ', out);
})
.catch(err => { throw err });
MDN: Fetch API
Хотя Node.js не имеет этого встроенного метода, вы можете использовать node-fetch, который допускает точно такую же реализацию.
Ответ 4
Axios - это HTTP-клиент на основе обещаний для браузера и node.js.
Он предлагает автоматическое преобразование для данных JSON и является официальной рекомендацией команды Vue.js при переходе с версии 1.0, которая по умолчанию включает клиент REST.
Выполнение запроса GET
// Make a request for a user with a given ID
axios.get('http://query.yahooapis.com/v1/publ...')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Или даже просто axios(url)
достаточно, поскольку запрос GET
используется по умолчанию.
Ответ 5
ES8 (2017) попробовать
obj = await (await fetch(url)).json();
async function load() {
let url = 'https://my-json-server.typicode.com/typicode/demo/db';
let obj = await (await fetch(url)).json();
console.log(obj);
}
load();
Ответ 6
Вы можете определить функцию, подобную этой:
fetchRestaurants(callback) {
fetch('http://www.restaurants.com')
.then(response => response.json())
.then(json => callback(null, json.restaurants))
.catch(error => callback(error, null))
}
Тогда используйте это так:
fetchRestaurants((error, restaurants) => {
if (error)
console.log(error)
else
console.log(restaurants[0])
});
Ответ 7
Вы можете получить доступ к данным JSON с помощью fetch() в JavaScript
Обновите параметр url функции fetch() в соответствии с вашим URL.
fetch(url)
.then(function(response){
return response.json();
})
.then(function(data){
console.log(data);
})
Надеюсь, это помогает, это отлично сработало для меня.
Ответ 8
async function fetchDataAsync() {
const response = await fetch('https://api.github.com/users/zq-jhon');
console.log(await response.json())
}
fetchDataAsync();
Ответ 9
//Resolved
const fetchPromise1 = fetch(url);
fetchPromise1.then(response => {
console.log(response);
});
//Pending
const fetchPromise = fetch(url);
console.log(fetchPromise);