Python读写JSON文件的操作详解

作者:Mr数据杨 时间:2021-03-22 11:46:35 

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。

PythonJSON
dictobject
list,tuplearray
strstring
int, long,floatnumber
Truetrue
Falsefalse
Nonenull

简单的序列化示例

创建一个简单的数据。

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 对象。

JSONPython
objectdict
arraylist
stringstr
number(整数)int
number(浮点数)float
trueTrue
falseFalse
nullNone

简单的反序列化示例

读取写入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'>

来源:https://blog.csdn.net/qq_20288327/article/details/124115125

标签:Python,读写,JSON
0
投稿

猜你喜欢

  • golang 中signal包的Notify用法说明

    2023-07-19 19:06:36
  • Python time模块之时间戳与结构化时间的使用

    2024-01-02 09:07:51
  • asp如何向客户端发送提示“出错信息”?

    2010-06-09 18:50:00
  • oracle常用sql语句

    2010-07-23 13:27:00
  • asp如何做一个密码“生成器”?

    2010-07-12 18:51:00
  • asp textarea 多行数组分割处理方法

    2011-03-03 10:55:00
  • 使用typescript快速开发一个cli的实现示例

    2023-08-30 07:25:25
  • 简单了解Python读取大文件代码实例

    2022-10-23 11:46:19
  • 基于python解线性矩阵方程(numpy中的matrix类)

    2023-11-03 06:54:12
  • 操作mysql数据库的类

    2010-03-13 12:53:00
  • ASP将Excel数据导入到SQLServer的实现代码

    2011-03-10 10:38:00
  • Python中关键字nonlocal和global的声明与解析

    2023-08-01 13:11:10
  • 艺术和设计之间的差别

    2010-11-17 19:28:00
  • 如何“看看”服务器上的那个文件还在不在?

    2009-11-02 20:17:00
  • Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)

    2012-11-30 20:09:36
  • 模拟兼容性的 inline-block 属性

    2008-04-08 12:37:00
  • Pytest mark使用实例及原理解析

    2021-02-27 14:30:11
  • 大牌 Banner 设计欣赏(468x60)

    2008-01-20 13:02:00
  • Python中unittest用法实例

    2023-09-02 13:13:45
  • Dreamweaver使用快技法十三则总结

    2008-05-01 17:32:00
  • asp之家 网络编程 m.aspxhome.com