使用Python解析JSON数据的基本方法


Posted in Python onOctober 15, 2015

Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多。 下面演示如何将一个Python数据结构转换为JSON:

import json

data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}

json_str = json.dumps(data)

下面演示如何将一个JSON编码的字符串转换回一个Python数据结构:

data = json.loads(json_str)

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:

# Writing JSON data
with open('data.json', 'w') as f:
 json.dump(data, f)

# Reading data back
with open('data.json', 'r') as f:
 data = json.load(f)

用法示例:
相对于python解析XML来说,我还是比较喜欢json的格式返回,现在一般的api返回都会有json与XML格式的选择,json的解析起来个人觉得相对简单些
先看一个简单的豆瓣的图书查询的api返回
http://api.douban.com/v2/book/isbn/9787218087351

{"rating":{"max":10,"numRaters":79,"average":"9.1","min":0},"subtitle":"","author":["野夫"],"pubdate":"2013-9","tags":[{"count":313,"name":"野夫","title":"野夫"},{"count":151,"name":"散文随笔","title":"散文随笔"},{"count":83,"name":"身边的江湖","title":"身边的江湖"},{"count":82,"name":"土家野夫","title":"土家野夫"},{"count":70,"name":"散文","title":"散文"},{"count":44,"name":"中国文学","title":"中国文学"},{"count":43,"name":"随笔","title":"随笔"},{"count":38,"name":"中国现当代文学","title":"中国现当代文学"}],"origin_title":"","image":"http://img5.douban.com/mpic/s27008269.jpg","binding":"","translator":[],"catalog":"自序 让记忆抵抗n001 掌瓢黎爷n024 遗民老谭n039 乱世游击:表哥的故事n058 绑赴刑场的青春n076 风住尘香花已尽n083 “酷客”李斯n100 散材毛喻原n113 颓世华筵忆黄门n122 球球外传:n一个时代和一只小狗的际遇n141 童年的恐惧与仇恨n151 残忍教育n167 湖山一梦系平生n174 香格里拉散记n208 民国屐痕","pages":"256","images":{"small":"http://img5.douban.com/spic/s27008269.jpg","large":"http://img5.douban.com/lpic/s27008269.jpg","medium":"http://img5.douban.com/mpic/s27008269.jpg"},"alt":"http://book.douban.com/subject/25639223/","id":"25639223","publisher":"广东人民出版社","isbn10":"7218087353","isbn13":"9787218087351","title":"身边的江湖","url":"http://api.douban.com/v2/book/25639223","alt_title":"","author_intro":"郑世平,笔名野夫,网名土家野夫。毕业于武汉大学,曾当过警察、囚徒、书商。曾出版历史小说《父亲的战争》、散文集《江上的母亲》(获台北2010国际书展非虚构类图书大奖,是该奖项第一个大陆得主)、散文集《乡关何处》(被新浪网、凤凰网、新华网分别评为2012年年度好书)。","summary":"1.野夫书稿中被删减最少,最能体现作者观点、情感的作品。n2.文字凝练,具有极强的感染力。以一枝孤笔书写那些就在你我身边的大历史背景下普通人的生活变迁。n3. 柴静口中“一半像警察,一半像土匪”的野夫,以其特有的韵律表达世间的欢笑和悲苦。","price":"32元"}

看起来别提多乱了,现在我们将其格式进行简单的整理

{
rating: {
 max: 10,
 numRaters: 79,
 average: "9.1",
 min: 0
},
subtitle: "",
author: [
 "野夫"
],
pubdate: "2013-9",
tags: [
 {
 count: 313,
 name: "野夫",
 title: "野夫"
 },
 {
 count: 151,
 name: "散文随笔",
 title: "散文随笔"
 },
 {
 count: 83,
 name: "身边的江湖",
 title: "身边的江湖"
 },
 {
 count: 82,
 name: "土家野夫",
 title: "土家野夫"
 },
 {
 count: 70,
 name: "散文",
 title: "散文"
 },
 {
 count: 44,
 name: "中国文学",
 title: "中国文学"
 },
 {
 count: 43,
 name: "随笔",
 title: "随笔"
 },
 {
 count: 38,
 name: "中国现当代文学",
 title: "中国现当代文学"
 }
],
origin_title: "",
image: "http://img5.douban.com/mpic/s27008269.jpg",
binding: "",
translator: [ ],
catalog: "自序 让记忆抵抗 001 掌瓢黎爷 024 遗民老谭 039 乱世游击:表哥的故事 058 绑赴刑场的青春 076 风住尘香花已尽 083 “酷客”李斯 100 散材毛喻原 113 颓世华筵忆黄门 122 球球外传: 一个时代和一只小狗的际遇 141 童年的恐惧与仇恨 151 残忍教育 167 湖山一梦系平生 174 香格里拉散记 208 民国屐痕",
pages: "256",
images: {
 small: "http://img5.douban.com/spic/s27008269.jpg",
 large: "http://img5.douban.com/lpic/s27008269.jpg",
 medium: "http://img5.douban.com/mpic/s27008269.jpg"
},
alt: "http://book.douban.com/subject/25639223/",
id: "25639223",
publisher: "广东人民出版社",
isbn10: "7218087353",
isbn13: "9787218087351",
title: "身边的江湖",
url: "http://api.douban.com/v2/book/25639223",
alt_title: "",
author_intro: "郑世平,笔名野夫,网名土家野夫。毕业于武汉大学,曾当过警察、囚徒、书商。曾出版历史小说《父亲的战争》、散文集《江上的母亲》(获台北2010国际书展非虚构类图书大奖,是该奖项第一个大陆得主)、散文集《乡关何处》(被新浪网、凤凰网、新华网分别评为2012年年度好书)。",
summary: "1.野夫书稿中被删减最少,最能体现作者观点、情感的作品。 2.文字凝练,具有极强的感染力。以一枝孤笔书写那些就在你我身边的大历史背景下普通人的生活变迁。 3. 柴静口中“一半像警察,一半像土匪”的野夫,以其特有的韵律表达世间的欢笑和悲苦。",
price: "32元"
}

下面我们通过python来取出想要的信息,比如我们想要rating,images里的large和summary

import urllib2
import json

html = urllib2.urlopen(r'http://api.douban.com/v2/book/isbn/9787218087351')

hjson = json.loads(heml.read())

print hjson['rating']
print hjson['images']['large']
print hjson['summary']

是不是很简单,其实只要把返回的json格式嵌套搞清楚,json还是比较简单的

Python 相关文章推荐
python实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
Python调用命令行进度条的方法
May 05 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
Python pip安装模块提示错误解决方案
May 22 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
Django中的JWT身份验证的实现
May 07 Python
深入讲解Python编程中的字符串
Oct 14 #Python
Python编程中字符串和列表的基本知识讲解
Oct 14 #Python
Python循环语句之break与continue的用法
Oct 14 #Python
Python编程中的for循环语句学习教程
Oct 14 #Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 #Python
解析Python中while true的使用
Oct 13 #Python
全面解析Python的While循环语句的使用方法
Oct 13 #Python
You might like
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
通信工程求职信
2014/07/16 职场文书
八达岭长城导游词
2015/01/30 职场文书
礼仪培训心得体会
2016/01/22 职场文书
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
mysql全面解析json/数组
2022/07/07 MySQL
Python如何将list中的string转换为int
2022/07/15 Ruby