python之json模块


## 0x00简介:

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。


序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON、XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。


## 0x01常用函数:

### json.dumps方法对简单数据类型encoding


encoding:把一个Python对象编码转换成Json字符串

decoding:把Json格式字符串解码转换成Python对象


    import json
    data = [{'a':"A",'b':(2,4),'c':3.0}]  #list对象
    print "DATA:",repr(data)
    
    data_string = json.dumps(data)
    print "JSON:",data_string

输出:

    DATA: [{'a':'A','c':3.0,'b':(2,4)}]
    JSON: [{"a":"A","c":3.0,"b":[2,4]}]  

### json.loads方法处理简单数据类型的decoding(解码)转换

使用loads方法即可将json字符串转换成python对象。

    import json
    data = [{'a':"A",'b':(2,4),'c':3.0}]  #list对象
    
    data_string = json.dumps(data)
    print "ENCODED:",data_string
    
    decoded = json.loads(data_string)
    print "DECODED:",decoded
    
    print "ORIGINAL:",type(data[0]['b'])
    print "DECODED:",type(decoded[0]['b'])

输出:

    ENCODED: [{"a": "A", "c": 3.0, "b": [2, 4]}]
    DECODED: [{u'a': u'A', u'c': 3.0, u'b': [2, 4]}]
    ORIGINAL: <type 'tuple'>


### sort_keys是告诉编码器按照字典排序(a到z)输出,



    import json
    data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
    print 'DATA:', repr(data)
    unsorted = json.dumps(data)
    print 'JSON:', json.dumps(data)
    print 'SORT:', json.dumps(data, sort_keys=True)
    
输出:
    
    DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
    JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]
    SORT: [{"a": "A", "b": [2, 4], "c": 3.0}

indent参数根据数据格式缩进显示,读起来更加清晰:
    
    print 'INDENT:', json.dumps(data, sort_keys=True, indent=2)

## json格式字符串写入到文件流中

    import json
    import tempfile
    
    f = tempfile.NamedTemporaryFile(mode='w+')
    f.write('[{"a": "A", "c": 3.0, "b": [2, 4]}]')
    f.flush()
    f.seek(0)
    
    print json.load(f)
    
输出:
    
    [{u'a': u'A', u'c': 3.0, u'b': [2, 4]}]


## 0x03基本案例:

案例1,

    import json
    js=json.loads('{"json":"你是我的,你好"}')
    print json.dumps(js)
    print json.dumps(js,ensure_ascii=False)

案例2,

    import json
    js=json.loads('{"json":"你是我的,你好"}')
    print json.dumps(js,encoding="GB2312")
    print json.dumps(js,encoding="utf-8")

案例3,

    import json
    s = '[{"name":"鸟巢","point":{"lat":"39.990","lng":"116.397"},"desc":"奥运会主场地"},{"name":"北大乒乓球馆","point":{"lat":"39.988","lng":"116.315"},"desc":"乒乓球比赛场地"},{"name":"北京工人体育场","point": {"lat":"39.930","lng":"116.446"},"desc":"足球比赛场地"}]'
    print type(s)    
    locations = json.loads(s)
    print type(locations)    
    #注:read是json-py.py和minijson.py的方法,而python2.6开始自带的lib库里用的是simplejson.py,其没有read方法,而是load/loads
    print str(len(locations)) #因为json.load()之后的对象就是dict类型的!
    for location in locations:
        print location["name"]
        print location["point"]["lat"]

案例4,

    import json
    json_string='{"first_name":"Guido","last_name":"Russum"}'
    print json_string
    print type(json_string)
    parsed_json=json.loads(json_string)
    print parsed_json
    print type(parsed_json)
    print parsed_json['last_name']
    print json.dumps(json_string)
    print json.loads(json_string)

posted @ 2016-07-30 11:15 lazy1 阅读(...) 评论(...) 编辑 收藏