¿Cómo analizar datos JSON con jQuery / JavaScript?

190

Tengo una llamada AJAX que devuelve algunos JSON como este:

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

Dentro del #canddiv obtendré:

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

¿Cómo puedo recorrer estos datos y colocar cada nombre en un div?

Patrioticcow
fuente

Respuestas:

281

Suponiendo que el script del lado del servidor no establece el Content-Type: application/jsonencabezado de respuesta adecuado , deberá indicar a jQuery que se trata de JSON mediante el dataType: 'json'parámetro.

Entonces podría usar la $.each()función para recorrer los datos:

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

o use el $.getJSONmétodo:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});
Darin Dimitrov
fuente
éxito. Gracias. ¿Tengo que enviar json pr puedo enviar algo desde mi función php?
Patrioticcow
77
@Patrioticcow, también puedes enviar JSON. En este caso, tendrá que ajustar la contentType: 'application/json'configuración de su $.ajaxfunción y JSON serializar el dataparámetro, al igual que: data: JSON.stringify({ get_param: 'value' }). Luego, en su script php, necesitaría decodificar json para recuperar el objeto original.
Darin Dimitrov
¿Qué es esto "hecho: función"? ¿Es eso lo mismo que "éxito"? No lo veo en los documentos.
Buttle Butkus
Mi información json es {"0":{"level1":"done","level2":"done","level3":"no"}}¿cómo puedo extraer esto en cada variable? Lo intenté usando este $.eachmétodo, pero devuelve var indefinidalevel1 = ele[0].level1;
151291
@DarinDimitrov ¿Cómo mostrar estos datos en un arranque de carrusel?
nideba
79

La configuración dataType:'json'analizará JSON por usted:

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

O de lo contrario puedes usar parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Entonces puedes repetir lo siguiente:

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

... usando $().each:

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

JSFiddle

Rafay
fuente
mi información json es {"0":{"level1":"done","level2":"done","level3":"no"}}¿cómo puedo extraer esto en cada variable? Lo intenté usando este $.eachmétodo, pero devuelve var indefinidalevel1 = ele[0].level1;
151291
1
@ 151291 esa no es una forma adecuada de hacer su pregunta, de todos modos aquí está el violín jsfiddle.net/fyxZt/1738 para su json. Notación de matriz de notasjson[0]
Rafay
Gracias. respuesta útil ¿Cómo obtener el valor de columna especificado en una tabla db?
PHPFan
@PHP: ¿Quieres decir cómo consultar la tabla de la base de datos? proporcione más información y recomendaría hacer una nueva pregunta, con los detalles necesarios incluidos.
Rafay
@Rafay, por ejemplo, en esta pregunta si solo quiero obtener los valores de nombre
PHPFan
24

Prueba el siguiente código, funciona en mi proyecto:

//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+'</>');
        }
    }
});
Sarabhaiah Polakam
fuente
11
 $(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: '/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
         for (var i=0;i<data.length;++i)
         {
         $('#cand').append('<div class="name">data[i].name</>');
         }
        }
    });
});
Mohammed Abdelrasoul
fuente
6

Usa ese código.

     $.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");
            }
        });
Shivam Srivastava
fuente
5

ok, tuve el mismo problema y lo solucioné así eliminando []de [{"key":"value"}]:

  1. en su archivo php, asegúrese de imprimir de esta manera
echo json_encode(array_shift($your_variable));
  1. en su función de éxito, haga esto
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

y también puedes hacer un bucle si quieres

elaz
fuente
5

Estoy de acuerdo con todas las soluciones anteriores, pero para señalar cuál es la causa raíz de este problema, ese jugador de rol principal en todo el código anterior es esta línea de código:

dataType:'json'

cuando pierde esta línea (que es opcional), los datos devueltos por el servidor se tratan como una cadena de longitud completa (que es el tipo de retorno predeterminado). Agregar esta línea de código informa a jQuery para convertir la posible cadena json en objeto json.

Cualquier llamada jQuery ajax debe especificar esta línea, si se espera un objeto de datos json.

justnajm
fuente
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>
Servesh Mishra
fuente
2

Datos Json

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

Cuando recuperar

$.ajax({
  //type
  //url
  //data
  dataType:'json'
}).done(function( data ) {
var i = data.clo.length; while(i--){
$('#el').append('<p>'+data.clo[i].fin+'</>');
}
});
Guspan Tanadi
fuente
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();
  });
});
Sarah Smith
fuente