json是python的标准库吗_JSON 标准库

1. 序列化的简单概念

我们平常对 python 对象所进行的操作是在内存中的,当程序关闭时这些对象就会被清空,所以我们需要用一种合适的方法将这些数据保存下来。

为了将我们的数据进行永久存储,需要引入序列化(pickling/serialization)的概念。

序列化的定义:将 python 对象编码成一个二进制数据集合(数据流);反序列化:将数据流解码成 python 对象。

序列化的好处:我们可以通过网络或本地存储介质将这些数据流进行传输或保存。

序列化的方法:引入 json、pickling、marshal、shelve 等,其中最常用的是 json。

2. JSON 标准库

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写。

基本用法

序列化方法

json.dumps():处理的是python对象,将 python 对象序列化为 json 字符串。

json.dump():处理的是文件对象,将序列化后的 json 字串保存到文件。

反序列化方法

json.loads():处理的是python对象,将已编码的 json 字符串反序列为 python 对象。

json.load():处理的是文件对象,从文件接收 json 字串并反序列化为 python 对象。

2.1 json.dumps()

将 python 对象编码(序列化)成 json 字符串。

语法

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None,

indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

较重要的参数:

sort_keys:是否按键排序

indent:定义缩进大小

separators:是一个元组,定义分隔符的类型(键之间的分隔符, 键值之间的分隔符)

skipkeys:是否允许json字串编码字典对象时,字典的key不是字符串类型(默认是不允许)

示例:

1 >>> importjson2 >>> json.dumps({"name":"xiaoming", "age": 18})# 将字典对象编码成json串(即字符串类型)3 '{"name": "xiaoming", "age": 18}'

4 >>>json.dumps([]) # 将列表对象编码成json串5 '[]'

6 >>> json.dumps("string") # 将字符串对象编码成json串7 '"string"'

8 >>> json.dumps(1) # 将数字对象编码成json串9 '1'

使用参数让 json 数据格式化输出

示例1:

1 >>> print(json.dumps({'b': 'Runoob', 'a': 7}, sort_keys=True, indent=4, separators=(',', ':')))2 {3 "a": 7,4 "b": "Runoob"

5 }

示例2:

1 >>> a = ['foo', {'bar': ('baz', None, 1.0, 2)}]2 >>> print(json.dumps(a, sort_keys=True, indent=4, separators=('!', '?'))) #分隔符这里只是测试,一般保持默认逗号和分号即可

3 [4 "foo"!5 {6 "bar"?[7 "baz"!8 null!9 1.0!10 2

11 ]12 }13 ]

Python 原始类型向 JSON 类型的转化对照表

PythonJSON

dict

object

list, tuple

array

str, unicode

string

int, long, float

number

True

true

False

false

None

null

示例:

1 #字典对象转json串

2 >>> data = {'b':None, 'c':(1,2), 'a':True, 'd':1.221}3 >>> json_data =json.dumps(data)4 >>> print(json_data)5 {"b": null, "c": [1, 2], "a": true, "d": 1.221}6

7 #json串转回字典对象

8 >>> dict_data =json.loads(json_data)9 >>> print(dict_data)10 {'b': None, 'c': [1, 2], 'a': True, 'd': 1.221}

2.2 json.loads()

将 json 字串解码成 python 的数据类型,也就是反序列化。

语法

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

示例

1 >>> importjson2 >>> jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

3 >>>type(jsonData)4

5 >>> rep =json.loads(jsonData)6 >>>rep7 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}8 >>>type(rep)9

JSON 类型转换到 Python 的类型对照表

JSONPython

object

dict

array

list

string

unicode

number (int)

int, long

number (real)

float

true

True

false

False

null

None

2.3 json.dump()

将序列化之后的JSON字串保存到文件中。

json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,

allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

示例:

1 importjson2

3 data = {"name":"xiaoming", "age":21, "gender":"boy"}4

5 #第一种方法:使用json.dumps()

6 with open("e:\\json1.txt", "w") as f:7 f.write(json.dumps(data, indent=4))8

9 #第二种方法:使用json.dump()

10 with open("e:\\json2.txt", "w") as f:11 json.dump(data, f, indent=4)

执行结果(文件内容):

{"name": "xiaoming","age": 21,"gender": "boy"}

2.4 json.load()

从文件中接收 JSON 串,并反序列化为 Python 的数据类型。

json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

示例:

1 importjson2

3 data = {"name":"xiaoming", "age":21, "gender":"boy"}4

5 #将json串写入文件中

6 with open("e:\\json3.txt", "w") as f:7 json.dump(data, f, indent=4)8

9 ## 读取json串

10

11 #方法1:json.loads()

12 with open("e:\\json3.txt", "r") as f:13 print(json.loads(f.read()))14

15 #方法2:json.load(open())

16 print(json.load(open("e:\\json3.txt")))17

18 #方法3:json.load() + with open()

19 with open("e:\\json3.txt") as f:20 print(json.load(f))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值