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 相关文章推荐
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
Python构建图像分类识别器的方法
Jan 12 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
pytorch实现线性拟合方式
Jan 15 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 Python
Python 忽略文件名编码的方法
Aug 01 Python
python切割图片的示例
Nov 12 Python
Python 如何解决稀疏矩阵运算
May 26 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、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
python递归计算N!的方法
2015/05/05 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
用python计算文件的MD5值
2020/12/23 Python
远东集团网络工程师面试题
2014/10/20 面试题
房地产开发计划书
2014/01/10 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
个人担保书格式范文
2014/05/12 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
Python绘画好看的星空图
2022/03/17 Python