J'ai la structure JSON suivante:
[{ "id":"10", "class": "child-of-9" }, { "id": "11", "classd": "child-of-10" }]
Comment puis-je itérer dessus en utilisant JavaScript?
Tiré de documentation jQuery :
var arr = [ "one", "two", "three", "four", "five" ];
var obj = { one:1, two:2, three:3, four:4, five:5 };
jQuery.each(arr, function() {
$("#" + this).text("My id is " + this + ".");
return (this != "four"); // will stop running to skip "five"
});
jQuery.each(obj, function(i, val) {
$("#" + i).append(document.createTextNode(" - " + val));
});
var arr = [ {"id":"10", "class": "child-of-9"}, {"id":"11", "classd": "child-of-10"}];
for (var i = 0; i < arr.length; i++){
var obj = arr[i];
for (var key in obj){
var attrName = key;
var attrValue = obj[key];
}
}
var arr = [ {"id":"10", "class": "child-of-9"}, {"id":"11", "class": "child-of-10"}];
for (var i = 0; i < arr.length; i++){
document.write("<br><br>array index: " + i);
var obj = arr[i];
for (var key in obj){
var value = obj[key];
document.write("<br> - " + key + ": " + value);
}
}
remarque: la méthode pour-en est cool pour les objets simples. Pas très intelligent à utiliser avec un objet DOM.
Utilisez foreach:
<html>
<body>
<script type="text/javascript">
var mycars = [{name:'Susita'}, {name:'BMW'}];
for (i in mycars)
{
document.write(mycars[i].name + "<br />");
}
</script>
</body>
</html>
Aura pour résultat:
Susita
BMW
S'il vous plaît laissez-moi savoir si ce n'est pas facile:
var jsonObject = {
name: 'Amit Kumar',
Age: '27'
};
for (var prop in jsonObject) {
alert("Key:" + prop);
alert("Value:" + jsonObject[prop]);
}
Si ceci est votre dataArray
:
var dataArray = [{"id":28,"class":"Sweden"}, {"id":56,"class":"USA"}, {"id":89,"class":"England"}];
ensuite:
$(jQuery.parseJSON(JSON.stringify(dataArray))).each(function() {
var ID = this.id;
var CLASS = this.class;
});
exemple de mootools:
var ret = JSON.decode(jsonstr);
ret.each(function(item){
alert(item.id+'_'+item.classd);
});
Copié et collé depuis http://www.w3schools.com , la surcharge JQuery n’est pas nécessaire.
var person = {fname:"John", lname:"Doe", age:25};
var text = "";
var x;
for (x in person) {
text += person[x];
}
RÉSULTAT: John Doe 25
Vous pouvez utiliser une mini bibliothèque comme objx - http://objx.googlecode.com/
Vous pouvez écrire du code comme ceci:
var data = [ {"id":"10", "class": "child-of-9"},
{"id":"11", "class": "child-of-10"}];
// alert all IDs
objx(data).each(function(item) { alert(item.id) });
// get all IDs into a new array
var ids = objx(data).collect("id").obj();
// group by class
var grouped = objx(data).group(function(item){ return item.class; }).obj()
Il existe plusieurs "plugins" disponibles pour vous permettre de gérer des données comme celle-ci, voir http://code.google.com/p/objx-plugins/wiki/PluginLibrary
Avec les objets imbriqués, il peut être récupéré comme par fonction récursive:
function inside(events)
{
for (i in events) {
if (typeof events[i] === 'object')
inside(events[i]);
else
alert(events[i]);
}
}
inside(events);
où as events est un objet json.
ceci est un exemple JavaScript pur et commenté.
<script language="JavaScript" type="text/javascript">
function iterate_json(){
// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();
// Create some variables we need to send to our PHP file
hr.open("GET", "json-note.php", true);//this is your php file containing json
hr.setRequestHeader("Content-type", "application/json", true);
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var data = JSON.parse(hr.responseText);
var results = document.getElementById("myDiv");//myDiv is the div id
for (var obj in data){
results.innerHTML += data[obj].id+ "is"+data[obj].class + "<br/>";
}
}
}
hr.send(null);
}
</script>
<script language="JavaScript" type="text/javascript">iterate_json();</script>// call function here
Le marquis Wang pourrait bien être la meilleure réponse lors de l'utilisation de jQuery.
Voici quelque chose d'assez similaire en JavaScript pur, utilisant la méthode forEach
de JavaScript. forEach prend une fonction en tant qu'argument. Cette fonction sera ensuite appelée pour chaque élément du tableau avec ledit élément comme argument.
Court et facile:
<script>
var results = [ {"id":"10", "class": "child-of-9"}, {"id":"11", "classd": "child-of-10"}];
results.forEach( function( item ) {
console.log( item );
});
</script>
var jsonString = "{\"schema\": {\"title\": \"User Feedback\", \"description\":\"so\", \"type\":\"object\", \"properties\":{\"name\":{\"type\":\"string\"}}}," +
"\"options\":{ \"form\":{\"attributes\":{}, \"buttons\":{ \"submit\":{ \"title\":\"It\", \"click\":\"function(){alert('hello');}\" }}} }}";
var jsonData = JSON.parse(jsonString);
function Iterate(data)
{
jQuery.each(data, function (index, value) {
if (typeof value == 'object') {
alert("Object " + index);
Iterate(value);
}
else {
alert(index + " : " + value);
}
});
};
Iterate(jsonData);
Une autre solution pour naviguer dans les documents JSON est JSONiq (implémentée dans le moteur Zorba ), où vous pouvez écrire quelque chose comme:
jsoniq version "1.0";
let $doc := [
{"id":"10", "class": "child-of-9"},
{"id":"11", "class": "child-of-10"}
]
for $entry in members($doc) (: binds $entry to each object in turn :)
return $entry.class (: gets the value associated with "class" :)
Vous pouvez l'exécuter sur http://try.zorba.io/