How to get JSON from URL in JavaScript?

JavascriptJson

Javascript Problem Overview


This URL returns JSON:

{
  query: {
    count: 1,
    created: "2015-12-09T17:12:09Z",
    lang: "en-US",
    diagnostics: {},
    ...
  }
}

I tried this, and it didn't work:

responseObj = readJsonFromUrl('http://query.yahooapis.com/v1/publ...');
var count = responseObj.query.count;

console.log(count) // should be 1

How can I get a JavaScript object from this URL's JSON response?

Javascript Solutions


Solution 1 - Javascript

You can use jQuery .getJSON() function:

$.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) {
    // JSON result in `data` variable
});

If you don't want to use jQuery you should look at this answer for pure JS solution.

Solution 2 - Javascript

If you want to do it in plain javascript, you can define a function like this:

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();
};

And use it like this:

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);
  }
});

Note that data is an object, so you can access its attributes without having to parse it.

Solution 3 - Javascript

With Chrome, Firefox, Safari, Edge, and Webview you can natively use the fetch API which makes this a lot easier, and much more terse.

If you need support for IE or older browsers, you can also use the fetch 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

Even though Node.js does not have this method built-in, you can use node-fetch which allows for the exact same implementation.

Solution 4 - Javascript

ES8(2017) try

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();

you can handle errors by try-catch

async function load() {
    let url = 'http://query.yahooapis.com/v1/publ...';
    let obj = null;
    
    try {
        obj = await (await fetch(url)).json();
    } catch(e) {
        console.log('error');
    }
    
    console.log(obj);
}

load();

Solution 5 - Javascript

Axios is a promise based HTTP client for the browser and node.js.

It offers automatic transforms for JSON data and it's the official recommendation from the Vue.js team when migrating from the 1.0 version which included a REST client by default.

> Performing a GET request > > // 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); > });

Or even just axios(url) is enough as a GET request is the default.

Solution 6 - Javascript

Define a function like:

fetchRestaurants(callback) {
    fetch(`http://www.restaurants.com`)
       .then(response => response.json())
       .then(json => callback(null, json.restaurants))
       .catch(error => callback(error, null))
}

Then use it like this:

fetchRestaurants((error, restaurants) => {
    if (error) 
        console.log(error)
    else 
        console.log(restaurants[0])

});

Solution 7 - Javascript

async function fetchDataAsync(url) {
    const response = await fetch(url);
    console.log(await response.json());
}

fetchDataAsync('paste URL');

Solution 8 - Javascript

this morning, i also had the same doubt and now its cleared i had just used JSON with 'open-weather-map'(https://openweathermap.org/) api and got data from the URL in the index.html file, the code looks like this:-

 //got location
 var x = document.getElementById("demo");
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(weatherdata);
      } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";
      }
    //fetch openweather map url with api key
    function weatherdata(position) {

//put corrdinates to get weather data of that location fetch('https://api.openweathermap.org/data/2.5/weather?lat='+position.coords.latitude+'&lon='+position.coords.longitude+'&appid=b2c336bb5abf01acc0bbb8947211fbc6';) .then(response => response.json()) .then(data => { console.log(data); document.getElementById("demo").innerHTML = '
wind speed:-'+data.wind.speed + '
humidity :-'+data.main.humidity + '
temprature :-'+data.main.temp
}); }

  <div id="demo"></div>

i had give api key openly because i had free subscription, just have a free subscriptions in beginning. you can find some good free api's and keys at "rapidapi.com"

Solution 9 - Javascript

as @DanAlboteanu answer in this page and some error corection of that javascript my suggested code is:

fetchRestaurants((error, data) => {
    if (error)
        console.log(error);	
    else
		console.log(data)

});

and fetchRestaurants method is(please replace your json url with {your url of json data}):

function fetchRestaurants(callback) {
    fetch("{your url of json data}")
       .then(response => response.json())
       .then(json => callback(null, json))
       .catch(error => callback(error, null))
}

Solution 10 - Javascript

You can access JSON data by using fetch() in JavaScript

Update url parameter of fetch() with your url.

fetch(url)
	.then(function(response){
		return response.json();
	})
	.then(function(data){
		console.log(data);
	})

Hope It helps, it worked perfectly for me.

Solution 11 - Javascript

//Resolved
const fetchPromise1 = fetch(url);
    fetchPromise1.then(response => {
      console.log(response);
    });


//Pending
const fetchPromise = fetch(url);
console.log(fetchPromise);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionYiğit Doğuş &#214;z&#231;elikView Question on Stackoverflow
Solution 1 - JavascriptDan BarzilayView Answer on Stackoverflow
Solution 2 - JavascriptRobin HartmannView Answer on Stackoverflow
Solution 3 - JavascriptDBrownView Answer on Stackoverflow
Solution 4 - JavascriptKamil KiełczewskiView Answer on Stackoverflow
Solution 5 - JavascriptEmile BergeronView Answer on Stackoverflow
Solution 6 - JavascriptDan AlboteanuView Answer on Stackoverflow
Solution 7 - Javascriptzq-jhonView Answer on Stackoverflow
Solution 8 - Javascriptuser12449933View Answer on Stackoverflow
Solution 9 - JavascriptAli RasouliView Answer on Stackoverflow
Solution 10 - JavascriptShivansh SrivastavaView Answer on Stackoverflow
Solution 11 - Javascriptashish bandiwarView Answer on Stackoverflow