How to parse JSON data with jQuery / JavaScript?
Asked Answered
B

12

214

I have an AJAX call that returns some JSON like this:

$(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: 'http://example/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
            var names = data
            $('#cand').html(data);
        }
    });
});

Inside the #cand div I'll get:

[ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ]

How can I loop through this data and place each name in a div?

Bisayas answered 21/1, 2012 at 9:2 Comment(0)
J
308

Assuming your server side script doesn't set the proper Content-Type: application/json response header you will need to indicate to jQuery that this is JSON by using the dataType: 'json' parameter.

Then you could use the $.each() function to loop through the data:

$.ajax({ 
    type: 'GET', 
    url: 'http://example/functions.php', 
    data: { get_param: 'value' }, 
    dataType: 'json',
    success: function (data) { 
        $.each(data, function(index, element) {
            $('body').append($('<div>', {
                text: element.name
            }));
        });
    }
});

or use the $.getJSON method:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});
Jonahjonas answered 21/1, 2012 at 9:9 Comment(6)
success. thanks. DO i have to send json pr i can send anything from my php function?Bisayas
@Patrioticcow, you can send JSON as well. In this case you will need to set the contentType: 'application/json' setting in your $.ajax function and JSON serialize the data parameter, like that: data: JSON.stringify({ get_param: 'value' }). Then in your php script you would need to json decode to get back the original object.Jonahjonas
What is this "done: function"? Is that the same as "success"? I don't see it in the docs.Passionate
My json data is {"0":{"level1":"done","level2":"done","level3":"no"}} how can extract this into each variables? i tried like this using $.each method but returns undefined var level1 = ele[0].level1;Arva
@DarinDimitrov How to show these data in a carousel bootstrap ?Schaffel
so if the server side sets Content-Type: application/json then does it get auto converted to a JS object?Nugent
U
91

Setting dataType:'json' will parse JSON for you:

$.ajax({
  type: 'GET',
  url: 'http://example/functions.php',
  data: {get_param: 'value'},
  dataType: 'json',
  success: function (data) {
    var names = data
    $('#cand').html(data);
  }
});

Or else you can use parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Then you can iterate the following:

var j ='[{"id":"1","name":"test1"},{"id":"2","name":"test2"},{"id":"3","name":"test3"},{"id":"4","name":"test4"},{"id":"5","name":"test5"}]';

...by using $().each:

var json = $.parseJSON(j);
$(json).each(function (i, val) {
  $.each(val, function (k, v) {
    console.log(k + " : " + v);
  });
}); 

JSFiddle

Urge answered 21/1, 2012 at 9:6 Comment(5)
my json data is {"0":{"level1":"done","level2":"done","level3":"no"}} how can extract this into each variables? i tried like this using $.each method but returns undefined var level1 = ele[0].level1;Arva
@151291 thats not a proper way to ask your question, anyway here is the fiddle jsfiddle.net/fyxZt/1738 for your json. Note array notation json[0]Urge
Thank you. helpful answer. How to get specified column value in a db table ?Patrick
@Patrick you mean how to query database table? please provide more information and i would recommend asking a new question, with necessary details included.Urge
@Urge for example in this question if I want to get the name values onlyPatrick
E
29

Try following code, it works in my project:

//start ajax request
$.ajax({
    url: "data.json",
    //force to handle it as text
    dataType: "text",
    success: function(data) {

        //data downloaded so we call parseJSON function 
        //and pass downloaded data
        var json = $.parseJSON(data);
        //now json variable contains data in json format
        //let's display a few items
        for (var i=0;i<json.length;++i)
        {
            $('#results').append('<div class="name">'+json[i].name+'</>');
        }
    }
});
Eveland answered 15/9, 2015 at 18:39 Comment(0)
S
12
 $(document).ready(function () {
    $.ajax({ 
        url: '/functions.php', 
        type: 'GET',
        data: { get_param: 'value' }, 
        success: function (data) { 
         for (var i=0;i<data.length;++i)
         {
         $('#cand').append('<div class="name">data[i].name</>');
         }
        }
    });
});
Stir answered 1/12, 2013 at 20:41 Comment(0)
F
6

Use that code.

     $.ajax({

            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "Your URL",
            data: "{}",
            dataType: "json",
            success: function (data) {
                alert(data);
            },
            error: function (result) {
                alert("Error");
            }
        });
Firefly answered 12/9, 2013 at 11:42 Comment(0)
H
6

ok i had the same problem and i fix it like this by removing [] from [{"key":"value"}]:

  1. in your php file make shure that you print like this
echo json_encode(array_shift($your_variable));
  1. in your success function do this
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

and also you can loop it if you want

Hunsinger answered 25/7, 2016 at 16:42 Comment(0)
S
6

I agree with all the above solutions, but to point out whats the root cause of this issue is, that major role player in all above code is this line of code:

dataType:'json'

when you miss this line (which is optional), the data returned from server is treated as full length string (which is default return type). Adding this line of code informs jQuery to convert the possible json string into json object.

Any jQuery ajax calls should specify this line, if expecting json data object.

Skippy answered 4/7, 2018 at 6:7 Comment(0)
P
3
var jsonP = "person" : [ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ];

var cand = document.getElementById("cand");
var json_arr = [];
$.each(jsonP.person,function(key,value){
    json_arr.push(key+' . '+value.name  + '<br>');
    cand.innerHTML = json_arr;
});

<div id="cand">
</div>
Petrillo answered 14/1, 2015 at 6:43 Comment(0)
S
3

Json data

data = {"clo":[{"fin":"auto"},{"fin":"robot"},{"fin":"fail"}]}

When retrieve

$.ajax({
  //type
  //url
  //data
  dataType:'json'
}).done(function( data ) {
var i = data.clo.length; while(i--){
$('#el').append('<p>'+data.clo[i].fin+'</>');
}
});
Sapling answered 11/8, 2016 at 3:34 Comment(0)
T
3

Here's how you would do this in JavaScript, this is a really efficient way to do it!

let data = '{ "name": "mark"}'
let object = JSON.parse(data);
console.log(object.name);

this would print mark

Touter answered 18/2, 2021 at 13:56 Comment(1)
it helped me lot thank you so muchTinstone
S
0
$.ajax({
  url: '//.xml',
  dataType: 'xml',
  success: onTrue,
  error: function (err) {
      console.error('Error: ', err);
  }
});

$('a').each(function () {
  $(this).click(function (e) {
      var l = e.target.text;
      //array.sort(sorteerOp(l));
      //functionToAdaptHtml();
  });
});
Symmetrize answered 13/6, 2018 at 13:43 Comment(0)
S
0

The $.parseJSON() has been removed in jQuery 4.

Use the native JSON.parse() function instead:

$.ajax({
    url: "data.json",
    dataType: "text",
    success: function(data) {
        var json = JSON.parse(data);
        // ...
    }
});
Sofiasofie answered 8/2 at 7:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.