在平時的開發過程中,經常遇到形如:{"1": {"name": "北京","city": {"1": {"name": "北京","area": {"92": "西城區"}},"1098": {"name": "懷柔","area": {}}}}} 的JSON格式數據,但是此類數據在后端語言,比如說.NET上,就不能很好地被反序列化,為此我們需要對其進行處理。我們處理遇到的主要問題是如何拿出Key為數字的Json數據,聯想到將JSON字符串轉換為對象后,JSON的key為對象的屬性,我們可以利用遍歷屬性的方式,取出所有的Key,再組裝成標准的"id":"value"的方式。OK,話不多說,開始動手去做。
1 var provinceList =[]; 2 var jso = "{\"1\": {\"name\": \"北京\",\"city\": {\"1\": {\"name\": \"北京\",\"area\": {\"92\": \"西城區\"}},\"1098\": {\"name\": \"懷柔\",\"area\": {}}}}}"; 3 var data = eval('(' + jso + ')'); 4 for (var prop in data) { 5 var province = {}; 6 province.id = prop; 7 province.name = data[prop].name; 8 province.city = []; 9 for (var cityprop in data[prop].city) { 10 var currentcity = {}; 11 currentcity.id = cityprop; 12 currentcity.name = data[prop].city[cityprop].name; 13 currentcity.area = []; 14 for (var areaprop in data[prop].city[cityprop].area) { 15 var currentarea = {}; 16 currentarea.id = areaprop; 17 currentarea.name = data[prop].city[cityprop].area[areaprop]; 18 currentcity.area.push(currentarea); 19 } 20 province.city.push(currentcity); 21 22 } 23 provinceList.push(province); 24 }
至此我們可以到標准的JSON : [{"id":"1","name":"北京","city":[{"id":"1","name":"北京","area":[{"id":"92","name":"西城區"}]},{"id":"1098","name":"懷柔","area":[]}]}]。 有了標准JSON,無論是反序列化成對象還是轉換為XML格式的文件都更方便了。