使用Python解析JSON数据的基本方法
Python的json模块提供了一种很简单的方式来编码和解码JSON数据。其中两个主要的函数是json.dumps()和json.loads(),要比其他序列化函数库如pickle的接口少得多。下面演示如何将一个Python数据结构转换为JSON:
importjson 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数据。例如:
#WritingJSONdata withopen('data.json','w')asf: json.dump(data,f) #Readingdataback withopen('data.json','r')asf: 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
importurllib2 importjson html=urllib2.urlopen(r'http://api.douban.com/v2/book/isbn/9787218087351') hjson=json.loads(heml.read()) printhjson['rating'] printhjson['images']['large'] printhjson['summary']
是不是很简单,其实只要把返回的json格式嵌套搞清楚,json还是比较简单的
PS:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用:
在线JSON代码检验、检验、美化、格式化工具:
http://tools.jb51.net/code/json
JSON在线格式化工具:
http://tools.jb51.net/code/jsonformat
在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson
json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.jb51.net/code/jsoncodeformat
在线json压缩/转义工具:
http://tools.jb51.net/code/json_yasuo_trans
C语言风格/HTML/CSS/json代码格式化美化工具:
http://tools.jb51.net/code/ccode_html_css_json