写一下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 d1print d2print d3print d1==d2print d1==d3输出:
{"a": 123, "b": 789, "c": 456} 
{"a": 123, "c": 456, "b": 789} 
{"a": 123, "b": 789, "c": 456} 
False 
True
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}
原文:http://www.cnblogs.com/dasydong/p/4423345.html