2013-08-08 6 views
1

Je suis nouveau pour le script jQuery et Java. Je dois analyser un fichier JSON qui a des tableaux, j'utilise ce code:Parse Json Array dans jQuery

$.getJSON('mat.json', function(data) { 
    var items = []; 
    $.each(data, function(key, val) { 
     items.push('<li id="' + key + '">' + val + '</li>'); 
    }); 

    $('<ul/>', {'class': 'my-new-list', html: items.join('')}).appendTo('body'); 
}); 

Pour ce fichier JSON:

{ 
    "@file_name": "materials", 
    "materials": [{ 
     "@site_name_English": "N/A", 
     "@site_name_Spanish": "N/A", 
     "@site_number": "1", 
     "zoom": [{ 
      "@zoom_name_English": "Main Reservoir", 
      "@zoom_name_Spanish": "Depósito principal", 
      "@zoom_number": "1", 
      "icon": [ 
       { 
        "@icon_name": "Info Icon 1", 
        "@icon_pin": "1" 
       }, 
       { 
        "@icon_name": "Info Icon 2", 
        "@icon_pin": "2" 
       } 
      ] 
     }] 
    }] 
} 

Mais mon résultat est:

materials 
[object Object] 

Comment puis-je changer mon code afin que j'obtienne les objets aussi quand la boucle les rencontre?

+0

Quelles propriétés de vos objets JSON voulez-vous voir dans votre id et contenu de 'li', respect ivement? – Raibaz

+0

Il ne ferait pas de mal à fournir un jsFiddle ;-) –

Répondre

1

Utilisez ceci:

$.each(data, function(key, val) 
{ 
    if(typeof val === 'object') { 
     $.each(val, function(keys, value) 
     { 
     items.push('<li id="' + keys + '">' + value + '</li>'); 
     } 
    } else { 
     items.push('<li id="' + key + '">' + val + '</li>'); 
    } 
}); 

Vous devez vérifier que la valeur est l'objet ou non.

ÉDITÉ:

function checkObj(key, val, items){ 
    if(typeof val === 'object') { 
     $.each(val, function(keys, value) 
      { 
      if(typeof value === 'object') { 
       checkObj(keys, value, items); 
      } else { 
       items.push('<li id="' + keys + '">' + value + '</li>'); 
      } 
     }); 
    } 
} 

Et dans l'utilisation de la fonction .each $ ceci:

$.each(data, function(key, val) 
{ 
    if(typeof val === 'object') { 
     checkObj(key, val, items); 
    } else { 
     items.push('<li id="' + key + '">' + val + '</li>'); 
    } 
}); 
+0

C'est exactement ce dont j'ai besoin, mais cela ne fonctionne pas :( – Dim

+0

@DanM vous devez créer une fonction qui sera fonction récursive pour lire de telles données JSON. Je vais créer cela pour vous –

+0

Merci beaucoup! – Dim

0

Le programme montre comment lire des données JSON et stocker en zone de texte

$(document).ready(function(){ 

$.getJSON("Test.json",function(data){ 

     $.each(data,function(key,value){ 
      alert(data[key].attrib1name); 
      alert(data[key].attrib2name); 
      $('input').val(data[key].enterpriseName); 
      activities=data[key].activities; 
      console.log(value); 
     }); 
    });  


});