python-json

 

1、使用dumps函数可以将对象序列化为一个json格式的字符串,使用loads函数可以直接将一个json格式的字符串反序列化为对象。

import json

params = {
    'symbol': '123456',
    'type': 'limit',
    'price': 123.4,
    'amount': 23
}

params_str = json.dumps(params)

print('after json serialization')
print('type of params_str = {}, params_str = {}'.format(type(params_str), params))

original_params = json.loads(params_str)

print('after json deserialization')
print('type of original_params = {}, original_params = {}'.format(type(original_params), original_params))

########## 输出 ##########

after json serialization
type of params_str = <class 'str'>, params_str = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}
after json deserialization
type of original_params = <class 'dict'>, original_params = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}

 

2、使用dump可以直接将json写入一个文件对象中,用load函数则可以直接从文件中读出字符串并将其反序列化。

import json

params = {
    'symbol': '123456',
    'type': 'limit',
    'price': 123.4,
    'amount': 23
}

with open('params.json', 'w') as fout:
    params_str = json.dump(params, fout)

with open('params.json', 'r') as fin:
    original_params = json.load(fin)

print('after json deserialization')
print('type of original_params = {}, original_params = {}'.format(type(original_params), original_params))

########## 输出 ##########

after json deserialization
type of original_params = <class 'dict'>, original_params = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}

 

3、json可以直接序列化一个字典类型,只需要传入一个字典变量就可以了,但却不能这样自动序列化一个类对象,这就需要它的第二个default参数,这个参数指定一个函数,这个函数的作用就是将类对象属性转化为一个字典,并且每个类默认自带这个方法,就是__dict__,所以序列化类对象的格式如下:

json.dumps(s, default=lambda obj: obj.__dict__)

 

4、同样的道理,如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict 转换为Student实例:

def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook=dict2student))

运行结果如下:

<__main__.Student object at 0x10cd3c190>

打印出的是反序列化的Student实例对象。

posted on 2017-03-10 09:00  simple_孙  阅读(683)  评论(0编辑  收藏  举报

导航