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实现的最近最少使用算法
Jul 10 Python
Python脚本处理空格的方法
Aug 08 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
你真的了解Python的random模块吗?
Dec 12 Python
Python之web模板应用
Dec 26 Python
python的常用模块之collections模块详解
Dec 06 Python
python解析xml简单示例
Jun 21 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
pip安装tensorflow的坑的解决
Apr 19 Python
python删除文件、清空目录的实现方法
Sep 23 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 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下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
JQuery each()嵌套使用小结
2014/04/18 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
在Python中使用元类的教程
2015/04/28 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
2015年全民创业工作总结
2015/07/23 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
如何获取numpy array前N个最大值
2021/05/14 Python
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
Python实现批量自动整理文件
2022/03/16 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers