zoukankan      html  css  js  c++  java
  • 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}

     
     
  • 相关阅读:
    序列操作
    random模块
    windows系统杀掉explorer.exe进程后黑屏
    Apache + SVN: Could not open the requested SVN filesystem
    使用ps命令批量删除相关进程
    'pybot.bat'不是内部或外部命令,也不是可运行的程序
    安装wxpython的时候报错 “no installation of python 2.7 found in registy”
    wxPython 使用Dialog实现模态对话框
    Python os.system()出现乱码
    Git操作reset --hard失误
  • 原文地址:https://www.cnblogs.com/dasydong/p/4423345.html
Copyright © 2011-2022 走看看