python操作json(一)

发布时间:2019-09-18 07:24:14编辑:auto阅读(1867)

    Python 操作json

    Json语法规则:
    数据在名称/值对中
    数据由逗号分隔
    花括号保存对象
    方括号保存数组
    Json字符串本质上是一个字符串,用单引号表示

    Json数据的书写格式
    名称--值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值:
    “name”: ”zhangsan” 等价于name = “zhangsan”
    Json值
    值可以是
    数字(整数或浮点数)
    字符串(双引号括起来)
    逻辑值(true或false)
    数组(在方括号中)
    对象(在花括号中)
    null
    Json对象
    Json的对象是在大括号中的,
    {“name”:”zhangsan”,”age”:20}
    等价 name=”zhangsan” age = 20

    Json数组
    Json数组是在中括号中的,数组可以包含多个对象
    {
    "employees": [
    { "firstName":"John" , "lastName":"Doe" },
    { "firstName":"Anna" , "lastName":"Smith" },
    { "firstName":"Peter" , "lastName":"Jones" }
    ]
    }
    Employees是包含三个对象的数组

    编码Json.dumps()
    将一个python对象编码成json字符串,

    Python的列表转换成json数组

    json.dumps([1,2,3,"a"])
    '[1, 2, 3, "a"]'

    Python的字符串转换成json字符串

    json.dumps("abc123")
    '"abc123"'

    Python元组转换成json数组

    json.dumps((1,2,3,"a","b"))
    '[1, 2, 3, "a", "b"]'

    Python的字典转换成json的对象

    json.dumps({1:"a",2:"b",3:"c"})
    '{"1": "a", "2": "b", "3": "c"}'#注意1、2、3被加上了双引号,因为json的名称是必须要加双引号的

    Python的数字(long型)转换成json的数字

    json.dumps(13L)
    '13'

    Python的数字(int)转换成json的数字

    json.dumps(13)
    '13'

    Python的unicode字符串转换成json的字符串

    json.dumps(u"abC")
    '"abC"'

    Python的True转换成json的true

    json.dumps(True)
    'true'

    Python的False转换成json的false

    json.dumps(False)
    'false'

    Python的None转换成json的null

    json.dumps(None)
    'null'

    type(json.dumps("abc"))#json本质上是一个字符串
    <type 'str'>

    怎么判断一个json 是不是合法的?
    用try except
    try:
    json.loads('"abc"')
    except Exception,e:
    print e
    else:
    print "ok"

    json.dumps()函数参数应用
    sort_keys
    是否按key排序,sort_keys = True升序排序

    #coding=utf-8
    import json
    data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 }]
    print json.dumps(data)
    print json.dumps(data, sort_keys=True)

    indent
    设置参数缩进显示的空格数。缩进显示使读起来更加清晰。
    #coding=utf-8
    import json
    data = [{"a": "A", "b": [2, 4], "c": 3.0}]
    print json.dumps(data, sort_keys=True, indent=3)

    Separators
    参数的作用是去掉逗号“,”和分号“:”后面的空格,从上面的输出果都能看到“,”与“:”后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上separators参数对传输的json串进行压缩。该参数是元组格式的
    import json
    data = [{"a": "A", "b": [2, 4], "c": 3.0}]
    print len(json.dumps(data))
    去掉编码后的json串中,和:后面的空格
    print len(json.dumps(data, separators=(',',':')))

    skipkeys
    在encoding过程中,dict对象的key只可以是基本数据类型(str,unicode,int,long,float,bool,None),如果是其他类型,那么在编码过程中就会抛出TypeError的异常。skipkeys可以跳过那些非string对象的key的处理,就是不处理
    import json
    data= [ { 'a':'A', 'b':(2, 4), 'c':3.0, (1,2):'D tuple' } ]
    print u"不设置skipkeys 参数"
    try :
    res1 = json.dumps(data) #skipkeys参数默认为False时
    except Exception, e:
    print e

    print u"设置skipkeys 参数"
    print json.dumps(data, skipkeys=True)

关键字