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 httplib模块使用实例
Apr 11 Python
python自动zip压缩目录的方法
Jun 28 Python
详解django中自定义标签和过滤器
Jul 03 Python
python如何爬取个性签名
Jun 19 Python
Python用5行代码写一个自定义简单二维码
Oct 21 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Python如何读取、写入CSV数据
Jul 28 Python
django数据模型中null和blank的区别说明
Sep 02 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
header导出Excel应用示例
2014/01/24 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
文字幻灯片
2006/06/26 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
Python爬虫代理IP池实现方法
2017/01/05 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
对Python中plt的画图函数详解
2018/11/07 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
利用python绘制正态分布曲线
2021/01/04 Python
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
GWebs公司笔试题
2012/05/04 面试题
环境工程毕业生自荐信
2013/11/17 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
个人授权委托书样本
2014/09/13 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
Golang中异常处理机制详解
2021/06/08 Golang
python基础之错误和异常处理
2021/10/24 Python