Python for Infomatics 第13章 网页服务二(译)
注:文章原文为Dr. Charles Severance 的 《Python for Informatics》。文中代码用3.4版改写,并在本机测试通过。
13.4 JavaScript Object Notation-JSON
JSON的格式灵感来自JavaScript语言中的对象和数组格式。因为Python语言的发明比JavaScript要早,所以Python关于词典和列表的语法影响了JSON的语法,故而JSON和Python的词典和列表的结合体几乎完全相同。
以下是JSON的一个编码,它和先前的简单XML大致相同。
{
"name" : "Chuck",
"phone" : {
"type" : "intl",
"number" : "+1 734 303 4456"
},
"email" : {
"hide" : "yes"
}
}
你将注意到两者有一些差异。首先,在XML里,我们可以在"phone"标签里添加像"intl"的属性。在JSON里,我们有的只是简单的键值对。同样XML中"person"的标签不见了,被最外面的一对大括号代替了。
一般来说,JSON的能力比XML弱,所以JSON结构比XML简单。但是JSON拥有映射到词典和链表结合体的优点。并且因为几乎所有的编程语言都拥有和Python等效的词典和列表,JSON是两个程序之间互换数据的非常自然的格式。
因为JSON比XML相对简单,JSON正快速成为程序间互换数据格式的首选。
13.5 分析JSON
我们用需要的词典和列表构建我们的JSON。在下面的例子中,我们示范了一个users列表,列表中的每个user是一个键值对。所以我们拥有的是一个词典的列表。
在下面的程序里,我们使用内置的json库分析JSON,并遍历数据。仔细比较前面等效的XML数据和代码。JSON只有很少的细节,所以我们必须预先知道我们正在获取一个列表,而这个列表中的每个user是一个键值对。JSON比较简洁,但同样自描述较差。
import json text = '''
[
{"id" : "001",
"x" : "2",
"name" : "Chuck"
},
{"id" : "009",
"x" : "7",
"name" : "Brent"
}
]''' info = json.loads(text) # 原书中用的load方法,但运行时报错 AttributeError: 'str' object has no attribute 'read'
print('User count:',len(info)) for item in info:
print('Name:',item['name'])
print('id:', item['id'])
print('Attribute:', item['x'])
如果你比较分别从JSON和XML分析并抓取数据的代码,你会明白json.loads返回的是一个我们能用for循环遍历的列表,而且列表中的每个元素是Python的词典。我们可以使用索引操作符来抓取user的不同信息。一旦JSON被分析,我们将简单地拥有Python对象和结构。因为返回的数据是简单的Python结构,我们不需用json库去深挖被分析的JSON。
这个程序的输出和前面的XML版本一模一样:
User count: 2
Name: Chuck
id: 001
Attribute: 2
Name: Brent
id: 009
Attribute: 7
网页服务从使用XML转向JSON逐渐成为一个工业趋势。因为JSON来得更简单,并且可以更直接的映射到编程语言中已有的原生数据结构,所以使用JSON分析和抓取数据来得更加简单和直接。但是因为XML的自描述能力要比JSON来的强,所以在一些程序中XML还保持着优势。例如,绝大多数的文字处理器更愿使用XML来保存内部文档。
Python for Infomatics 第13章 网页服务二(译)的更多相关文章
- Python for Infomatics 第13章 网页服务四(译)
这几天因为其他事务,打断了自己的学习计划,今天继续我的翻译,避免又中途而废. 注:文章原文为Dr. Charles Severance 的 <Python for Informatics> ...
- Python for Infomatics 第13章 网页服务三(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.6 应用程序接口API 现 ...
- Python for Infomatics 第13章 网页服务一(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 一旦利用程序通过HTTP协议获得 ...
- Python for Infomatics 第12章 网络编程二(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.3 用HTTP协议获取一张 ...
- Linux就这个范儿 第13章 打通任督二脉
Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...
- #Python学习笔记:1-3章 (基于《python编程,从入门到实践)
第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...
- Python for Infomatics 第12章 网络编程六(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.9 词汇表 Beautif ...
- Python for Infomatics 第12章 网络编程四(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.7 用BeautifulS ...
- Python for Infomatics 第12章 网络编程一(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 本书中的许多例子关注的是读取文件 ...
随机推荐
- Linux学习之三--scp命令
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...
- 原子类java.util.concurrent.atomic.*原理分析
原子类java.util.concurrent.atomic.*原理分析 在并发编程下,原子操作类的应用可以说是无处不在的.为解决线程安全的读写提供了很大的便利. 原子类保证原子的两个关键的点就是:可 ...
- oracle遇到的锁异常,oralce record is locked by another user
由于我在前不久的一次项目调试的时候,将一条数据的ID与另一条数据的ID相同了,但不知为什么没有报错,当在页面发现问题时,删除这条数据时就报错了,oralce record is locked by a ...
- JavaScript生成新标签的三个方法(摘抄自留)
<div id="d1"></div> <script> //HTML function a(){ document.getElementByI ...
- MVC安全防护
一.XSS攻击 跨域脚本攻击(Cross Site Scripting),恶意植入前端代码,比如HTML代码和客户端脚本,异常js获取用户cookie然后跳转到别的站点. 防护措施 标签转换(如&qu ...
- 解决NetBeans运行web项目时出现的“未能正确设置java DB”问题
1.在NetBeans导航器中,点击"服务"选项卡: 2.展开"数据库"菜单: 3.在"Java DB"上右键 –> 选择" ...
- 为RecyclerView的不同item项实现不同的布局(添加分类Header)
最近在做一个应用的时候,需要为GridLayoutManager添加头部header,然后自然而然就想到了用不同的itemType去加载不同的布局. 1.实现多item布局,用不同的itemType去 ...
- linux vim 插入行号
1 在文本中插入行号 最近有朋友提到某编辑器有一个可以插入行号的插件,问Vim有没有办法可以在文章中插入行号.%$^&*#8~#$@#!--让我们看一下有多少种方式可以在vim中插入行号或数字 ...
- 怎么写makefile?(转)
跟我一起写 Makefile 陈皓 第一章.概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 pr ...
- Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现
最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...