python里json的排序


寫一下json排序的問題:

將得到的數據轉換成json格式傳給ajax,會發現前台得到的數據很有可能和我們在后台的內容’不太一樣‘,如果不出意外,json進行了自排序處理,至於按什么格式排的我還沒研究,當然應該不是字母順序

那如果我們想在前台按照字母順序或者數字順序排序要怎么做呢?

如果json里鍵值對以這樣組合 {1:‘ab’,2:'ac',},排序是不需要擔心的,會安裝id順序排列

如果是數組類型的json對象,排序可以使用array.sort,

var people = [{    name: 'a75',    item1: false },{    name: 'z32',    item1: true },{    name: 'e77',    item1: false }];

function sortByKey(array, key) {
    return array.sort(function(a, b) {
        var x = a[key]; var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
}

people = sortByKey(people, 'name');
得到結果是a75,e77,z32按照這個順序的。

那如果不是數組類型json對象呢,寫兩組數據對比下

data1 = {'b':789,'c':456,'a':123}

data2 =  { 'a' : 123 , 'b' : 789 , 'c' : 456 }
d1 =  json.dumps(data1,sort_keys = True )
d2 =  json.dumps(data2)
d3 =  json.dumps(data2,sort_keys = True )
print  d1
print  d2
print  d3
print  d1 = = d2
print  d1 = = d3

輸出:

{"a": 123, "b": 789, "c": 456} 
{"a": 123, "c": 456, "b": 789} 
{"a": 123, "b": 789, "c": 456} 
False 
True

這里使用了sort_keys這個參數。
 
btw

indent參數是縮進的意思,它可以使得數據存儲的格式變得更加優雅。

data1  =  { 'b' : 789 , 'c' : 456 , 'a' : 123 }
d1  =  json.dumps(data1,sort_keys = True ,indent = 4 )
print  d1 

輸出:


    "a": 123, 
    "b": 789, 
    "c": 456 
}

輸出的數據被格式化之后,變得可讀性更強,但是卻是通過增加一些冗余的空白格來進行填充的。json主要是作為一種數據通信的格式存在的,而網絡通信是很在乎數據的大小的,無用的空格會占據很多通信帶寬,所以適當時候也要對數據進行壓縮。separator參數可以起到這樣的作用,該參數傳遞是一個元組,包含分割對象的字符串。

print  'DATA:' repr (data)
print  'repr(data)             :' len ( repr (data))
print  'dumps(data)            :' len (json.dumps(data))
print  'dumps(data, indent=2)  :' len (json.dumps(data, indent = 4 ))
print  'dumps(data, separators):' len (json.dumps(data, separators = ( ',' , ':' )))

輸出:

DATA: {'a': 123, 'c': 456, 'b': 789} 
repr(data)             : 30 
dumps(data)            : 30 
dumps(data, indent=2)  : 46 
dumps(data, separators): 25

通過移除多余的空白符,達到了壓縮數據的目的,而且效果還是比較明顯的。

另一個比較有用的dumps參數是skipkeys,默認為False。 dumps方法存儲dict對象時,key必須是str類型,如果出現了其他類型的話,那么會產生TypeError異常,如果開啟該參數,設為True的話,則會比較優雅的過度。

data  =  { 'b' : 789 , 'c' : 456 ,( 1 , 2 ): 123 }
print  json.dumps(data,skipkeys = True

輸出:

{"c": 456, "b": 789}

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM