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之做一个小游戏
Sep 28 Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
详解python调度框架APScheduler使用
Mar 28 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
Feb 28 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
基于python实现复制文件并重命名
Sep 16 Python
常用的Python代码调试工具总结
Jun 23 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
php 分页原理详解
2009/08/21 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
python3 配置logging日志类的操作
2020/04/08 Python
一套英文Java笔试题面试题
2016/04/21 面试题
卫校护理专业毕业生求职信
2013/11/26 职场文书
自荐书模板
2013/12/19 职场文书
大学生职业生涯规划范文
2013/12/31 职场文书
新学期决心书
2014/03/11 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Python一行代码实现自动发邮件功能
2021/05/30 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers