python 操作json数据
简介
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,通常是以键值对的方式呈现,其简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而在Python中处理JSON格式的模块有json和pickle两个。
json模块和pickle都提供了四个方法:dumps, dump, loads, load
序列化:将python的数据转换为json格式的字符串
反序列化:将json格式的字符串转换成python的数据类型
dumps与loads
dumps与loads主要是针对于json数据的处理,更加关注于数据类型本身。
json_data = {'test': {'test1_1': 1}, 'test2': {'test2_2': {'test2_3': 2}}, 'test3': {'test3_2': {'test3_3': {'test3_4': 3}}}}
content = json.dumps(json_data)
print(content)
print(type(content))
content = json.loads(content)
print(content)
print(type(content))
{"test": {"test1_1": 1}, "test2": {"test2_2": {"test2_3": 2}}, "test3": {"test3_2": {"test3_3": {"test3_4": 3}}}}
<class 'str'>
{'test': {'test1_1': 1}, 'test2': {'test2_2': {'test2_3': 2}}, 'test3': {'test3_2': {'test3_3': {'test3_4': 3}}}}
<class 'dict'>
dump与load
dump与load主要是针对于json文件的处理。
test.json
{
"test":{
"test1_1":1
},
"test2":{
"test2_2":{
"test2_3":2
}
},
"test3":{
"test3_2":{
"test3_3":{
"test3_4":3
}
}
}
}
读取json数据并写入新的json数据
import json, os
JSON_PATH = os.path.join(os.path.dirname(__file__), 'test.json')
JSON_PATH2 = os.path.join(os.path.dirname(__file__), 'test2.json')
with open(JSON_PATH, mode='r', encoding='utf8') as r_f:
content = json.load(r_f)
print(content)
print(type(content))
with open(JSON_PATH2, mode='w', encoding='utf-8') as w_f:
json.dump(content, w_f, indent=True)
{'test': {'test1_1': 1}, 'test2': {'test2_2': {'test2_3': 2}}, 'test3': {'test3_2': {'test3_3': {'test3_4': 3}}}}
<class 'dict'>
总结
json.dumps、json.dump是将python数据类型转换为json数据的字符串类型。
json.loads、json.load是将json数据的字符串类型转换为python数据类型,一般为字典
json.dumps与json.loads主要是针对于json数据的处理,更加关注于数据类型本身。
json.dump与json.load主要是针对于json文件的处理。
补充
读取json文件中的所有key值(包含嵌套)
json文件如下:
{
"test":{
"test1_1":1
},
"test2":{
"test2_2":{
"test2_3":2
}
},
"test3":{
"test3_2":{
"test3_3":{
"test3_4":3
}
}
},
"test4":{
"test4_2":{
"test4_3":{
"test4_4": {
"test4_5": 4
}
}
}
},
"test5":5
}
import time
data_list = []
# 读取json数据中所有的key
def read_json_key(json_path):
with open(json_path, mode='r', encoding='utf-8') as f:
content = json.load(f)
print(content)
start = time.time()
get_json_key(content)
print(time.time() - start)
print(f'data_list:{data_list}')
start = time.time()
print('get_json_key2:',list(get_json_key2(content)))
print(time.time() - start)
start = time.time()
print('get_json_key3:',list(get_json_key3(content)))
print(time.time() - start)
def get_json_key(content):
if isinstance(content, dict) and len(content) > 0:
for key in content.keys():
data_list.append(key)
get_json_key(content[key])
def get_json_key2(content):
if isinstance(content, dict) and len(content) > 0:
for key in content.keys():
yield key
for item in get_json_key2(content[key]):
yield item
def get_json_key3(content):
if isinstance(content, dict) and len(content) > 0:
for key in content.keys():
yield key
yield from get_json_key3(content[key])
read_json_key(JSON_PATH)
{'test': {'test1_1': 1}, 'test2': {'test2_2': {'test2_3': 2}}, 'test3': {'test3_2': {'test3_3': {'test3_4': 3}}}, 'test4': {'test4_2': {'test4_3': {'test4_4': {'test4_5': 4}}}}, 'test5': 5}
9.298324584960938e-06
data_list:['test', 'test1_1', 'test2', 'test2_2', 'test2_3', 'test3', 'test3_2', 'test3_3', 'test3_4', 'test4', 'test4_2', 'test4_3', 'test4_4', 'test4_5', 'test5']
get_json_key2: ['test', 'test1_1', 'test2', 'test2_2', 'test2_3', 'test3', 'test3_2', 'test3_3', 'test3_4', 'test4', 'test4_2', 'test4_3', 'test4_4', 'test4_5', 'test5']
1.7642974853515625e-05
get_json_key3: ['test', 'test1_1', 'test2', 'test2_2', 'test2_3', 'test3', 'test3_2', 'test3_3', 'test3_4', 'test4', 'test4_2', 'test4_3', 'test4_4', 'test4_5', 'test5']
1.5974044799804688e-05
上述均使用了递归,分别使用了普通的列表存取,yield, yield from,使用yield和yield from可以减少内存消耗
python 操作json数据的更多相关文章
- Python操作JSON数据代码示例
#!/usr/bin/env python import json import os def json_test(): return_dic = {} json_data = { 'appid':' ...
- python操作json来存储简单的数据,pickle来操作复杂的数据
json作为不同语言间进行数据交互的媒介,在当下已经渐渐取代了之前的xml,看一波python操作json # coding = ascii import json import pickle imp ...
- python 发送json数据操作实例分析 - python
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 本文实例讲述了python 发送json数据操作.分享给大家供大家参考,具体如下: # !/usr/bin/env py ...
- 使用Python解析JSON数据的基本方法
这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下: ----------------------------------- ...
- js中如何操作json数据
一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...
- Python读取JSON数据,并解决字符集不匹配问题
今天来谈一谈Python解析JSON数据,并写入到本地文件的一个小例子. – 思路如下 从一个返回JSON天气数据的网站获取到目标JSON数据串 使用Python解析出需要的部分 写入到本地文件,供其 ...
- Jquery重新学习之五[操作JSON数据]
Jquery操作Json格式的数据在我们平时的项目中也经常运用:最近看Jquery权威指南中就有一章节是对这方面的整理总结:最后通过一个Asp.net结合一般处理程序ashx的实例,基本上能满足项目中 ...
- 【Python】python和json数据相互转换,json读取和写入,repr和eval()使用
python数据转换json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import jso ...
- vim调用python格式化json数据
vim调用python格式化json数据 November 30, 2013GNU/Linuxpython3, Vimopenwares python有个标准模块叫json,用于编码/解码,序列化/按 ...
随机推荐
- Blazor和Vue对比学习(基础1.4):事件和子传父
Blazor和Vue的组件事件,都使用事件订阅者模式.相对于上一章的组件属性,需要多绕一个弯,无论Blazor还是Vue,都是入门的第一个难点.要突破这个难点,一是要熟悉事件订阅模式<其实不难& ...
- 关于win10安装wsl子系统Ubuntu图形界面的错误解决
解决了https://blog.csdn.net/weixin_30834783/article/details/102144314Xserver个人使用的是VcXsrv. 在WSL中配置环境变量DI ...
- 【算法】快速排序(Quick Sort)(六)
快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. ...
- c++:-9
上节(c++:-8)主要学习了C++的流类库和输入输出,本节学习C++的异常处理. 异常处理 介绍 (1)异常处理的基本思想: (2)异常处理的语法: (3)举例:处理除0异常 #include &l ...
- 第06组 Beta冲刺 (3/5)
目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.曾丽莉 4.杜筱 5. 董翔云 6.黄少丹 7.鲍凌函 8.詹鑫冰 9.曹兰英 10.吴沅静 1.3 冲刺成果展示 1.1 ...
- python发QQ邮件
python发qq邮件相对比较简单,网上教程一大把:固定套路,后面封装看自己怎么方便可以怎样进行封装:原版代码如下: """ # -*- coding : utf-8 - ...
- 一个支持数据绑定与数据联动的Dashboard
什么是仪表盘 仪表盘是不同部件的组合,可以在一个页面集中显示各类信息,方便用户集中查看信息.并快速处理业务 关于制作部件,请参见:制作部件 CabloyJS仪表盘的特点 更灵活的自适应能力,可以针对m ...
- Eureka服务下线太慢,电话被告警打爆了
某年某月的某一天,就像一张破碎的脸... 错了,重来. 某天,忽然发现大量的告警,经过多番调查研究考察(此处省略3000字),发现是由于 Eureka 服务下线太慢,而仍然有大量的请求打进来导致的报错 ...
- JZOJ 5409 Fantasy & NOI 2010 超级钢琴 题解
其实早在 2020-12-26 的比赛我们就做过 5409. Fantasy 这可是紫题啊 题目大意 给你一个序列,求长度在 \([L,R]\) 区间内的 \(k\) 个连续子序列的最大和 题解 如此 ...
- 入坑KeePass(四)KeePass通过坚果云WebDav同步方法
参考博客:什么值得买平台-Keepass+坚果云:多平台密码无缝同步 .1.在坚果云上创建一个同步专用的文件夹(建议勾上"默认不同步到电脑"选项) 创建之后可以把刚才创建的数据库文 ...