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最基本的输入输出详解
Apr 25 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
django输出html内容的实例
May 27 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
Python中的引用和拷贝实例解析
Nov 14 Python
python 批量将中文名转换为拼音
Feb 07 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 Python
python自动化之如何利用allure生成测试报告
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
杏林同学录(八)
2006/10/09 PHP
一步一步学习PHP(1) php开发环境配置
2010/02/15 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
js 上传图片预览问题
2010/12/06 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
通信专业个人自我鉴定
2013/10/21 职场文书
简单英文演讲稿
2014/01/01 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
店面出租协议书范本
2014/11/28 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
python 中yaml文件用法大全
2021/07/04 Python