使用 Python 处理 JSON 格式的数据


Posted in Python onJuly 22, 2019

如果你不希望从头开始创造一种数据格式来存放数据,JSON 是一个很好的选择。如果你对 Python 有所了解,就更加事半功倍了。下面就来介绍一下如何使用 Python 处理 JSON 数据。

JSON 的全称是 JavaScript 对象表示法 JavaScript Object Notation 。这是一种以键值对的形式存储数据的格式,并且很容易解析,因而成为了一种被广泛使用的数据格式。另外,不要因为 JSON 名称而望文生义,JSON 并不仅仅在 JavaScript 中使用,它也可以在其它语言中使用。下文会介绍它是如何在 Python 中使用的。

首先我们给出一个 JSON 示例:

{
 "name":"tux",
 "health":"23",
 "level":"4"
}

上面是一个和编程语言无关的原生 JSON 数据。熟悉 Python 的人会看出来这个 JSON 数据跟 Python 中的 字典 dictionary 长得很像。而这两者之间确实非常相似,如果你对 Python 中的列表和字典数据结构有一定的理解,那么 JSON 理解起来也不难。

使用字典存放数据

如果你的应用需要存储一些结构复杂的数据,不妨考虑使用 JSON 格式。对比你可能曾经用过的自定义格式的文本配置文件,JSON 提供了更加结构化的可递归的存储格式。同时,Python 自带的 json 模块已经提供了可以将 JSON 数据导入/导出应用时所需的所有解析库。因此,你不需要针对 JSON 自行编写代码进行解析,而其他开发人员在与你的应用进行数据交互的时候也不需要去解析新的数据格式。正是这个原因,JSON 在数据交换时被广泛地采用了。

以下是一段在 Python 中使用嵌套字典的代码:

#!/usr/bin/env python3
import json
# instantiate an empty dict
team = {}
# add a team member
team['tux'] = {'health': 23, 'level': 4}
team['beastie'] = {'health': 13, 'level': 6}
team['konqi'] = {'health': 18, 'level': 7}

这段代码声明了一个名为 team 的字典,并初始化为一个空字典。

如果要给这个字典添加内容,首先需要创建一个键,例如上面示例中的 tux 、 beastie 、 konqi ,然后为这些键一一提供对应的值。上面示例中的值由一个个包含游戏玩家信息的字典充当。

字典是一种可变的变量。字典中的数据可以随时添加、删除或更新。这样的特性使得字典成为了应用程序存储数据的极好选择。

使用 JSON 格式存储数据

如果存放在字典中的数据需要持久存储,这些数据就需要写到文件当中。这个时候就需要用到 Python 中的 json 模块了:

with open('mydata.json', 'w') as f:
 json.dump(team, f)

上面的代码首先创建了一个名为 mydata.json 的文件,然后以写模式打开了这个文件,这个被打开的文件以变量 f 表示(当然也可以用任何你喜欢的名称,例如 file 、 output 等)。而 json 模块中的 dump() 方法则是用于将一个字典输出到一个文件中。

从应用中导出数据就是这么简单,同时这些导出的数据是结构化的、可理解的。现在可以查看导出的数据:

$ cat mydata.json
{"tux": {"health": 23, "level": 4}, "beastie": {"health": 13, "level": 6}, "konqi": {"health": 18, "level": 7}}

从 JSON 文件中读取数据

如果已经将数据以 JSON 格式导出到文件中了,也有可能需要将这些数据读回到应用中去。这个时候,可以使用 Python json 模块中的 load() 方法:

#!/usr/bin/env python3

import json

f = open('mydata.json')
team = json.load(f)
print(team['tux'])
print(team['tux']['health'])
print(team['tux']['level'])
print(team['beastie'])
print(team['beastie']['health'])
print(team['beastie']['level'])
# when finished, close the file
f.close()

这个方法实现了和保存文件大致相反的操作。使用一个变量 f 来表示打开了的文件,然后使用 json 模块中的 load() 方法读取文件中的数据并存放到 team 变量中。

其中的 print() 展示了如何查看读取到的数据。在过于复杂的字典中迭代调用字典键的时候有可能会稍微转不过弯来,但只要熟悉整个数据的结构,就可以慢慢摸索出其中的逻辑。

当然,这里使用 print() 的方式太不灵活了。你可以将其改写成使用 for 循环的形式:

for i in team.values():
 print(i)

使用 JSON

如上所述,在 Python 中可以很轻松地处理 JSON 数据。因此只要你的数据符合 JSON 的模式,就可以选择使用 JSON。JSON 非常灵活易用,下次使用 Python 的时候不妨尝试一下。

via:https://opensource.com/article/19/7/save-and-load-data-python-json

总结

以上所述是小编给大家介绍的使用 Python 处理 JSON 格式的数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python使用cookielib库示例分享
Mar 03 Python
python函数装饰器用法实例详解
Jun 04 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
使用Eclipse如何开发python脚本
Apr 11 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
python 安装impala包步骤
Mar 28 Python
python变量的作用域是什么
May 26 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 Python
关于python类SortedList详解
Sep 04 Python
用python写一个定时提醒程序的实现代码
Jul 22 #Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 #Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 #Python
Python定时任务APScheduler的实例实例详解
Jul 22 #Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 #Python
django云端留言板实例详解
Jul 22 #Python
python实现图片中文字分割效果
Jul 22 #Python
You might like
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php学习笔记之基础知识
2014/11/08 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
python实现证件照换底功能
2019/08/20 Python
Python如何实现线程间通信
2020/07/30 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
HTML5地理定位实例
2014/10/15 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
荷叶圆圆教学反思
2014/02/01 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
新教师岗前培训方案
2014/06/05 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
教师网络培训心得体会
2016/01/09 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书