How to parse multidimensional JSON to html easily?
You can use jquery jput plugin (http://plugins.jquery.com/jput/)
http://jsfiddle.net/mse255ko/1/
var data=[ { "country": "India", "state": [ { "name": "Delhi", "capital": "New Delhi" }, { "name": "Tamilnadu", "capital": "Chennai" } ] }, { "country": "USA", "state": [ { "name": "Alabama", "capital": "Montgomery" }, { "name": "Alaska", "capital": "Juneau" } ]}];$(document).ready(function(){ //loading json data initally $('#maindiv').jPut({ jsonData:data, name:'template1' });});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script src="http://shabeer-ali-m.github.io/jPut/js/jput.min.js"></script><div id="maindiv"> <div jput="template1"> <ul> <li>{{country}}</li> <ul> <li>State 1 Name : {{state.0.name}}, Capital : {{state.0.capital}}</li> <li>State 2 Name : {{state.1.name}}, Capital : {{state.1.capital}}</li> </ul> </ul> </div> </div>
Please use jquery each for looping the JSON data, here during each iteration the variable html value is concatenated, so you can append to any DIV.
var data = [ { "country": "India", "state": [ { "name": "Delhi", "capital": "New Delhi" }, { "name": "Tamilnadu", "capital": "Chennai" } ] }, { "country": "USA", "state": [ { "name": "Alabama", "capital": "Montgomery" }, { "name": "Alaska", "capital": "Juneau" } ]}];jQuery(document).ready(function(){ var html = ""; jQuery.each(data, function(i,v){ var temp = JSON.parse(JSON.stringify(v)); html += "<ul><li>"+temp.country+"</li></ul>"; jQuery.each(temp.state, function(j,val){ html += "<li>" + val.name +"</li>"; }); }); $("#result-div").html(html); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div id="result-div"></div>
1- Iterate arrays with forEach
2- check the existence of keys in dictionaries using object.hasOwnProperty
3- create html elements with $("< type-of-element >")
4- build string in desired format.
You can try this script:
var data= [ { "country": "India", "state": [ { "name": "Delhi", "capital": "New Delhi" }, { "name": "Tamilnadu", "capital": "Chennai" } ] }, { "country": "USA", "state": [ { "name": "Alabama", "capital": "Montgomery" }, { "name": "Alaska", "capital": "Juneau" } ] }]var to_append = $("body") //your append selectorif(data && data.length>0){ var outer_ul = $("<ul>") data.forEach(function(e,i){ if(e.hasOwnProperty("country")){ outer_ul.append($("<li>", {text : e['country']})) } if(e.hasOwnProperty("state")){ var inner_ul = $("<ul>") e['state'].forEach(function(__e,__i){ if(__e.hasOwnProperty('capital')){ inner_ul.append($("<li>", {text : "State "+(__i+1) + " : " + __e['capital']})) } }) outer_ul.append(inner_ul) } }) to_append.append(outer_ul)}
this will get the html output:
<ul><li>India</li><ul><li>State 1 : New Delhi</li><li>State 2 : Chennai</li></ul><li>USA</li><ul><li>State 1 : Montgomery</li><li>State 2 : Juneau</li></ul></ul>