json模块的使用

2020年8月9日 / 20次阅读 / Last Modified 2020年8月12日

本文总结一点python标准库中json模块的使用。json主要是异种用于程序之间的数据交换格式,关于json本身,请参考:json数据格式

使用json模块,其实就是对数据进行序列化和反序列化的操作。python对于这类操作,接口函数的命令是比较统一的,都是load,dump,loads,dumps这样的,比如pickle模块。

json模块接口产生的数据都是str!

python对象和json数据类型的对应关系:

JSONPython
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone

load和dump

load和dump,后面没有带s,表示是对文件进行操作。load,读取文件,dump,写入文件,中间当然就是按照json格式进行反序列化和序列化的操作。

>>> import json
>>> f = open('tt.json')
>>> data = json.load(f)
>>> data
{'fromaddr': 'from@qq.com', 'passwd': '123456789', 'server': 'smtp.qq.com', 'port': 587, 'connect': 'tls', 'timeout': 3, 'debuginfo': False, 'msg': [{'subject': 'test json file', 'to': 'to@qq.com', 'cc': None, 'bcc': None, 'type': 'plain', 'content': '人生hahaha...lalala...'}, {'subject': 'test json file', 'to': 'to@qq.com', 'cc': None, 'bcc': None, 'type': 'html', 'content': '

2222...hahaha...lalala...

'}]} >>> type(data) <class 'dict'> >>> f.tell() 610 >>> f.close()

data通过json.load接口,直接就成为了一个dict对象。

>>> g = open('tt2.json_dump', 'w')
>>> json.dump(data, g)
>>> g.tell()
426
>>> g.close()
>>> os.system('bash')
$ cat tt2.json_dump
{"fromaddr": "from@qq.com", "passwd": "123456789", "server": "smtp.qq.com", "port": 587, "connect": "tls", "timeout": 3, "debuginfo": false, "msg": [{"subject": "test json file", "to": "to@qq.com", "cc": null, "bcc": null, "type": "plain", "content": "\u4eba\u751fhahaha...lalala..."}, {"subject": "test json file", "to": "to@qq.com", "cc": null, "bcc": null, "type": "html", "content": "

2222...hahaha...lalala...

"}]}

将一个dict对象,直接dump进一个文件。

loads和dumps

这两个函数后面带s,表示操作对象是str对象,其它都一样。

>>> data
{'a': [1, 2, 3, 4, 5], 'b': [5, 4, 3, 2, 1]}
>>> json.dumps(data)
'{"a": [1, 2, 3, 4, 5], "b": [5, 4, 3, 2, 1]}'
>>> json.loads(json.dumps(data))
{'a': [1, 2, 3, 4, 5], 'b': [5, 4, 3, 2, 1]}

json模块还有一个工具tool,可以用来在命令行检查json数据并美化输出

python官方对json模块的说明页:https://docs.python.org/3/library/json.html#module-json,使用上的细节就要到这里去查阅了。

json.dump和json.dumps这两函数,如果给indent=4参数,就可以实现pretty output的效果。json.tool就是这么干的!

-- EOF --

本文链接:https://www.pynote.net/archives/2337

相关文章

    留言区

    《json模块的使用》有4条留言

    电子邮件地址不会被公开。 必填项已用*标注

    • 麦新杰

      json的object跟python的dict是何其相似... [回复]

    • 麦新杰

      json is human readable and safe... [回复]

    • 麦新杰

      json是str,pickle是bytes [回复]

    • 麦新杰

      优秀的设计思想都是想通的:python的repr函数可以将对象表达成一个str,通过网络可以传递这个str对象,在另一头直接eval还原对象。 [回复]


    前一篇:
    后一篇:

    More


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top