Python读写JSON文件的操作详解
目录
JSONJSON 起源JSON 样例Python 原生支持 JSON序列化 JSON简单的序列化示例JSON 反序列化简单的反序列化示例应用案例编码和解码JSON
JSON 起源
JSON 全称 JavaScript Object Notation 。是处理对象文字语法的 JavaScript 编程语言的一个子集。JSON 早已成为与语言无关的语言,并作为自己的标准存在。
JSON 样例
{ "data":[ { "id": "1", "name": "A同学", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同学", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同学", "state": "0", "createTime": "2020-01-21" } ] }
Python 原生支持 JSON
Python 带有一个内置包 json,用于对 JSON 数据进行编码和解码。
引用方式。
import json
JSON 编码的过程通常称为序列化。该术语是指将数据转换为一系列字节通过网络存储或传输。反序列化是解码以 JSON 标准存储或交付的数据的交互过程。
序列化 JSON
直观的转换将简单的 Python 对象转换为 JSON。
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str | string |
int, long,float | number |
True | true |
False | false |
None | null |
简单的序列化示例
创建一个简单的数据。
data = { "data":[ { "id": "1", "name": "A同学", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同学", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同学", "state": "0", "createTime": "2020-01-21" } ] }
数据直接以文本方式保存。
with open("data_file.json", "w") as f: json.dump(data, f)
数据直接以字符串方式使用。
json_str = json.dumps(data)
JSON 反序列化
在 json 库中使用 load() 和 oads() 用于将 JSON 编码数据转换为 Python 对象。
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number(整数) | int |
number(浮点数) | float |
true | True |
false | False |
null | None |
简单的反序列化示例
读取写入json文件的数据。
with open("data_file.json", "r") as read_file: data = json.load(read_file)
字符串数据。
json_string = """ { "data":[ { "id": "1", "name": "A同学", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同学", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同学", "state": "0", "createTime": "2020-01-21" } ] } """ data = json.loads(json_string)
应用案例
通过互联网的数据抓取解析文本信息。
# 秦皇岛煤炭网微博 import requests from bs4 import BeautifulSoup import datetime url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid" post_param = {"pageNum":"1","pageSize":"20","jsonStr":"{"typeid":"238"}"} return_data = requests.post(url,data =post_param) return_data = return_data.content.decode("utf-8") import json for i in json.loads(return_data)["rows"]: title = i["title"] url = "http://news.cqcoal.com/blank/nc.jsp?mid="+str(i["id"]) timeStamp=int(i["pubdate"]) dateArray = datetime.datetime.utcfromtimestamp(timeStamp) date = dateArray.strftime("%Y-%m-%d") print(title,url,date)
编码和解码
自定义数据。
import json # 基础的数字字典 py_object = {"c": 0, "b": 0, "a": 0} # JSON 编码 json_string = json.dumps(py_object) print(json_string) print(type(json_string)) {"c": 0, "b": 0, "a": 0}# JSON 解码 py_obj = json.loads(json_string) print(py_obj) print(type(py_obj)) {"c": 0, "b": 0, "a": 0}
如果遇到TypeError: Object of type SampleClass is not JSON serializable的错误就需要自定义编码和解码了。
import json class Student: def __init__(self, name, roll_no, address): self.name = name self.roll_no = roll_no self.address = address def to_json(self): """ 将此类的实例转换为 json """ return json.dumps(self, indent = 4, default=lambda o: o.__dict__) class Address: def __init__(self, city, street, pin): self.city = city self.street = street self.pin = pin address = Address("Bulandshahr", "Adarsh Nagar", "203001") student = Student("Raju", 53, address) # 编码 student_json = student.to_json() print(student_json) print(type(student_json)) { "name": "Raju", "roll_no": 53, "address": { "city": "Bulandshahr", "street": "Adarsh Nagar", "pin": "203001" } }# 解码 student = json.loads(student_json) print(student) print(type(student)) {"name": "Raju", "roll_no": 53, "address": {"city": "Bulandshahr", "street": "Adarsh Nagar", "pin": "203001"}}
以上就是Python读写JSON文件的操作详解的详细内容,更多关于Python读写JSON的资料请关注脚本之家其它相关文章!
下一篇:C语言深入探究动态规划之线性DP
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?