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 相关文章推荐
Python 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
python全栈开发语法总结
Nov 22 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
Nov 28 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
python 如何做一个识别率百分百的OCR
May 29 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
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
PHP的全局错误处理详解
2016/04/25 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
JS验证不重复验证码
2017/02/10 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
我爱祖国演讲稿
2014/09/02 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
公司庆典欢迎词
2015/01/26 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
python中的3种定义类方法
2021/11/27 Python