使用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条件和循环的使用方法
Nov 01 Python
Python的标准模块包json详解
Mar 13 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
python爬虫爬取网页表格数据
Mar 07 Python
点球小游戏python脚本
May 22 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
Python3批量创建Crowd用户并分配组
May 20 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 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
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
js的写法基础分析
2011/01/17 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
详解vue axios中文文档
2017/09/12 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python中装饰器的一个妙用
2015/02/08 Python
Python创建模块及模块导入的方法
2015/05/27 Python
Python之re操作方法(详解)
2017/06/14 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
PHP统计代码行数的小代码
2019/09/19 Python
python super的使用方法及实例详解
2019/09/25 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
土木工程应届生自荐信
2013/09/24 职场文书
晚宴邀请函范文
2014/01/15 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
关于长城的导游词
2015/01/30 职场文书
法制教育观后感
2015/06/17 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技