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分割TXT文件成4K的TXT文件
May 23 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python实现定制交互式命令行的方法
Jul 03 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
Python+Django搭建自己的blog网站
Mar 13 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
python保存字典和读取字典的实例代码
Jul 07 Python
Django中使用MySQL5.5的教程
Dec 18 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 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语言流程控制中的主动与被动
2012/11/05 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
php分页查询的简单实现代码
2017/03/14 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python Subprocess模块原理及实例
2019/08/26 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
自荐信范文
2013/12/10 职场文书
项目副经理岗位职责
2013/12/30 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
离婚协议书格式
2015/01/26 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书