標籤:
寫一下json排序的問題:
將得到的資料轉換成json格式傳給ajax,會發現前台得到的資料很有可能和我們在背景內容’不太一樣‘,如果不出意外,json進行了自排序處理,至於按什麼格式排的我還沒研究,當然應該不是字母順序
那如果我們想在前台按照字母順序或者數字順序排序要怎麼做呢?
如果是數群組類型的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}
python裡json的排序