使用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 相关文章推荐
在类Unix系统上开始Python3编程入门
Aug 20 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
python 环境变量和import模块导入方法(详解)
Jul 11 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 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学习之变量的使用
2011/05/29 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
AngularJS快速入门
2015/04/02 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
python实现C4.5决策树算法
2018/08/29 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
Python解析微信dat文件的方法
2020/11/30 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
教师自我评价范文
2013/12/16 职场文书
决心书标准格式
2014/03/11 职场文书
酒店端午节活动方案
2014/08/26 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
中秋联欢会主持词
2015/07/04 职场文书
仓库管理制度范本
2015/08/04 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
检举信的写法
2019/04/10 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS