您当前的位置:首页 > 计算机 > 编程开发 > Python

Python使用JSON序列化从入门到精通

时间:12-25来源:作者:点击数:

JSON(JavaScript Object Notation)是一个轻量级的数据交换格式,Python标准库json完美实现了该格式,用法类似于marshal和pickle。

>>> import json

# 序列化列表对象

# 直接查看序列化后的结果

>>> json.dumps(['a','b','c'])

'["a", "b", "c"]'

# 反序列化

>>> json.loads(_)

['a', 'b', 'c']

# 序列化字典对象

>>> json.dumps({'a':1, 'b':2, 'c':3})

'{"a": 1, "b": 2, "c": 3}'

>>> json.loads(_)

{'a': 1, 'b': 2, 'c': 3}

>>> json.dumps([1,2,3,{'4': 5, '6': 7}])

'[1, 2, 3, {"4": 5, "6": 7}]'

# 指定分隔符,可以压缩存储,注意和上面结果的区别

>>> json.dumps([1,2,3,{'4':5, '6':7}], separators=(',', ':'))

'[1,2,3,{"4":5,"6":7}]'

>>> json.loads(_)

[1, 2, 3, {'4': 5, '6': 7}]

# 序列化中文字符串

>>> json.dumps('山东烟台')

'"\\u5c71\\u4e1c\\u70df\\u53f0"'

>>> json.loads(_)

'山东烟台'

# 无法直接序列化集合对象

>>> json.dumps({1,2,3,4})

Traceback (most recent call last):

  File "<pyshell#49>", line 1, in <module>

    json.dumps({1,2,3,4})

  File "C:\Python36\lib\json\__init__.py", line 231, in dumps

    return _default_encoder.encode(obj)

  File "C:\Python36\lib\json\encoder.py", line 199, in encode

    chunks = self.iterencode(o, _one_shot=True)

  File "C:\Python36\lib\json\encoder.py", line 257, in iterencode

    return _iterencode(o, 0)

  File "C:\Python36\lib\json\encoder.py", line 180, in default

    o.__class__.__name__)

TypeError: Object of type 'set' is not JSON serializable

# 自定义序列化编码器

>>> class setEncoder(json.JSONEncoder):

    def default(self, obj):

        if isinstance(obj, set):

            return list(obj)

        return json.JSONEncoder.default(self, obj)

# 自定义反序列化解码器

>>> class setDecoder(json.JSONDecoder):

    def decode(self, obj):

        return set(json.JSONDecoder.decode(self, obj))

# 使用自定义的编码器和解码器

>>> json.dumps({1,2,3,4}, cls=setEncoder)

'[1, 2, 3, 4]'

>>> json.loads(_, cls=setDecoder)

{1, 2, 3, 4}

>>> s = '''董付国,系列图书:

《Python程序设计基础》、

《Python程序设计》(第2版)、

《Python可以这样学》

清华大学出版社'''

# 将内容序列化并写入文本文件

>>> with open('test.txt', 'w') as fp:

    json.dump(s, fp)

# 读取文件内容并反序列化

>>> with open('test.txt') as fp:

    print(json.load(fp))

   

董付国,系列图书:

《Python程序设计基础》、

《Python程序设计》(第2版)、

《Python可以这样学》

清华大学出版社

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门