Python内置包对JSON文件数据进行编码和解码


Posted in Python onApril 12, 2022

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 数据进行编码和解码。

Python内置包对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)

Python内置包对JSON文件数据进行编码和解码

编码和解码

自定义数据。

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


# JSON 解码
py_obj = json.loads(json_string)

print(py_obj)
print(type(py_obj))

{'c': 0, 'b': 0, 'a': 0}
<class 'dict'>

如果遇到 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"
    }
}
<class 'str'>

# 解码
student = json.loads(student_json)
print(student)
print(type(student))

{'name': 'Raju', 'roll_no': 53, 'address': {'city': 'Bulandshahr', 'street': 'Adarsh Nagar', 'pin': '203001'}}
<class 'dict'>

以上就是Python读写JSON文件的操作详解的详细内容!

Python 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python实现简单登陆流程的方法
Apr 22 Python
python实现录音小程序
Oct 26 Python
Python版中国省市经纬度
Feb 11 Python
python中wheel的用法整理
Jun 15 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 Python
Python中使用subprocess库创建附加进程
May 11 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 Python
详细介绍python操作RabbitMq
Python selenium绕过webdriver监测执行javascript
Apr 12 #Python
Pillow图像处理库安装及使用
Apr 12 #Python
Python各协议下socket黏包问题原理
Apr 12 #Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 #Python
分享Python异步爬取知乎热榜
尝试使用Python爬取城市租房信息
Apr 12 #Python
You might like
PHP PDO函数库详解
2010/04/27 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
mui上拉加载功能实例详解
2017/04/13 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python中格式化format()方法详解
2017/04/01 Python
Python中装饰器学习总结
2018/02/10 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Python类中self参数用法详解
2020/02/13 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
六一儿童节主持词
2014/03/21 职场文书
低碳环保口号
2014/06/12 职场文书
教师党员承诺书2015
2015/01/21 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
美容院员工规章制度
2015/08/05 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android