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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
Python中的闭包详细介绍和实例
Nov 21 Python
简洁的十分钟Python入门教程
Apr 03 Python
python实现文本文件合并
Dec 29 Python
python机器学习之神经网络(一)
Dec 20 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
学习python分支结构
May 17 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
python中seaborn包常用图形使用详解
Nov 25 Python
numpy数据类型dtype转换实现
Apr 24 Python
Python time库的时间时钟处理
May 02 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 危险函数全解析
2009/09/09 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
prototype 的说明 js类
2006/09/07 Javascript
javascript实现二分查找法实现代码
2007/11/12 Javascript
javascript parseInt 大改造
2009/09/27 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
React实现轮播效果
2020/08/25 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
python中删除某个元素的方法解析
2019/11/05 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
小学家长学校培训材料
2014/08/24 职场文书
端午节活动总结
2014/08/26 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
python 提取html文本的方法
2021/05/20 Python
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA