2013-10-24 21 views
0

我有JSON像排序複雜JSON對象而不損耗數據,並用相同的結構

var MyJSON = { 
    "item1" : "value1", 
    "item2" : { 
    "somedata": "somevalue", 
     "entries":[ 
     { 
     "sortitem":"ABC", 
     }, 
     { 
     "sortitem":"PQR",  
     }, 
     { 
     "sortitem":"XYZ",  
     } 
     ] 
    } 
    "item3" : { 
    "somedata": "somevalue", 
     "entries":[ 
     { 
     "sortitem":"abc", 
     }, 
     { 
     "sortitem":"pqr",  
     }, 
     { 
     "sortitem":"xyz",  
     } 
     ] 
    } 

}; 

我不得不排序MyJSON上的「sortitem」而不改變結構並且沒有數據丟失。

+2

請注意您希望用於您的任務的編程語言。 – 2013-10-24 06:04:30

+1

請注意,這個問題似乎沒有任何**與JSON完全相關。看起來你正在將JavaScript對象文字(JavaScript語言語法的結構)與JSON(獨立於語言的數據交換格式,如XML或CSV)相混淆。另請參閱:[沒有像「JSON對象」那樣的東西](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。即使您將數據作爲JSON(例如,通過Ajax),排序通常是在語言中的本地數據結構上完成的,而不是在JSON序列化的數據上。 –

+0

還發布了一些您可能試圖用該語言實現的代碼。 – mavrosxristoforos

回答

0

也許這將幫助,

(function (data, sField){ 
    function recurse (dt){ 
     for(prop in dt){ 
      if(Object.hasOwnProperty.call(dt, prop)){ 
       if(Object.prototype.toString.call(dt[prop]) === '[object Array]'){ 
        dt[prop].sort(function(a, b){ 
         if(!a[sField] || !b[sField]) return 0; 
         return a[sField].localeCompare(b[sField]); 
        }); 
       } 
       else if(Object.prototype.toString.call(dt[prop]) === '[object Object]'){ 
        recurse(dt[prop]); 
       } 
      } 
     } 
    } 
    recurse(data); 
})(MyJSON, 'sortitem'); //data and sortfield 

希望這會有所幫助。