python标准库:json模块


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

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

类型转换

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

pythonjson
dictobject
list,tuplearray
strstring
int,floatnumber
Truetrue
Falsefalse
Nonenull

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

jsonpython
objectdist
arraylist
stringstr
number(int)int
number(float)float
trueTrue
falseFalse
nullNone

使用方法

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'}

 

转载于:https://www.cnblogs.com/austinjoe/p/9629914.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值