Python读写JSON文件的操作详解
作者:Mr数据杨 发布时间:2021-03-22 11:46:35
标签:Python,读写,JSON
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 数据进行编码和解码。
引用方式。
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)
编码和解码
自定义数据。
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
0
投稿
猜你喜欢
- 在MySQL中可以使用IF()、IFNULL()、NULLIF()、ISNULL()函数进行流程的控制。1、IF()函数的使用IF(expr
- 互联网的真正算得上成功的产品屈指可数,每年都有成千上万个新网站出现,同时也有成千上万的网站死去,而那些算得上成功的产品,无不是从这些尸骨堆里
- 表单验证做网站程序多多少少都会碰到,其中emai地址的合法性验证也算是一个典型的例子,网页表单的验证我们一般是先在客户端使用javascri
- 总体思路与一元线性回归思想一样,现在将数据以矩阵形式进行运算,更加方便。 一元线性回归实现代码下面是多元线性回归用Python实现的代码:i
- PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能实现跟c
- python中,A object = B object 是一种赋值操作,赋的值不是一个对象在内存中的空间,而只是这个
- 通过jsonp简单获取接口数据,对了,注意下jsonp方法会自动添加callback<template><div clas
- 一、什么是凯撒密码“在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最
- ARP欺骗又称ARP毒化或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC
- * 惯,请先看测试页面:event-test.html 结论:在非IE浏览器,同一元素同一事件类型的处理函数是先进先出的。只有IE下,是先进
- 一、 了解postman1. 什么是postman?------ 软件测试用来做接口测试的工具。2. 如何下载postman--
- 续上一篇文章:vue2.0 开发实践总结之入门篇 ,如果没有看过的可以移步看一下。 本篇文章目录如下:1. vue 组
- 前言用过unittest的童鞋都知道,有两个前置方法,两个后置方法;分别是setup()setupClass()teardown()tear
- cli2去掉eslint检查器报错eslint在编写过程中及其严格,甚至单引号和双引号或者空格注释都会引起报错,导致项目无法正常运行因此,只
- 使用 designer 进行开发首先要知道,使用 Qt designer 和 代码进行 Qt 开发实现页面跳转是不一样的,这里我们使用的是
- 如下所示:#!/usr/bin/python# coding=utf-8#import timeimport datetime# 今天日期t
- 一、常用函数:APP_NAME: 返回当前会话的应用程序名称(如果应用程序进行了设置)。SELECT APP_NAME()COALESCE:
- <?php function getDerivativeByFormulaAndXDATA($formula, $x_data){ $
- <%@ page language="java" import="java.util.*" p
- 拉勾网面试题1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。2. 让所有学生拍成一队,然后按顺序报数。3. 学生报数时,