python标准库:json模块

Json


Json是一种轻量级的数据交换格式。Json源自JavaScript语言,易于人类的阅读和编写,同时也易于机器解析和生成,是目前应用最广泛的数据交换格式。获取详细信息可访问官网http://json.org/

Json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,对Python的类就无能为力。JSON格式和Python中的字典非常像。但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。这是因为在别的语言中,双引号引起来的才是字符串,单引号引起来的是字符;Python程序员习惯性的在列表、元组或字典的最后一个元素的后面加个逗号,这在json中是不允许的,需要特别注意。

类型转换

将数据从python转化到json时其数据格式会有变化,见下表:

python json
dict object
list,tuple array
str string
int,float number
True true
False false
None null

反之,将json对象转化为python对象数据格式也有所变化,见下表:

json python
object dist
array list
string str
number(int) int
number(float) float
true True
false False
null None

使用方法

json模块操作十分简单,多数情况下我们只需要使用以下四种方法就足够了。

方法 功能
json.dumps(obj) 将python数据转化成json数据
json.loads(s) 将json数据转化成python数据
json.dump(obj,fp) 将python数据转化并保存为json的数据文件
json.load(fp) 从json格式的文件中读取数据并转化成python格式

范例

import json
data={
    "name":"joe",
    "age":22,
    "sex":"male"
}
trans_data=json.dumps(data)
print(trans_data)
print(json.loads(trans_data))


>>>{"name": "joe", "sex": "male", "age": 22}
>>>{'name': 'joe', 'sex': 'male', 'age': 22}

注意观察每次转化结束后数据是单引号还是双引号。

需要注意的是json模块不支持bytes类型,要先将bytes转换为str格式。

import json
data='hello'
data2=b'hello'
print(json.dumps(data))
print(json.dumps(data2))


>>>"hello"
Traceback (most recent call last):
  File "/home/pyvip/JoePY/home/pyvip/JoePY/test2.py", line 102, in <module>
    print(json.dumps(data2))
  File "/usr/lib/python3.5/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python3.5/json/encoder.py", line 179, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'hello' is not JSON serializable

可以看到二进制的数据在转化时会报错。

import json
data={
    "name":"joe",
    "age":22,
    "sex":"male"
}
json.dump(data,open('data.json','w'))

import os
print(os.listdir())

>>>'log.txt', 'data.json', '20180725.py',

print(json.load(open('data.json','r')))

>>>{'age': 22, 'sex': 'male', 'name': 'joe'}

猜你喜欢

转载自www.cnblogs.com/austinjoe/p/9629914.html