注:文章原文为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章 网页服务二(译)的更多相关文章

  1. Python for Infomatics 第13章 网页服务四(译)

    这几天因为其他事务,打断了自己的学习计划,今天继续我的翻译,避免又中途而废. 注:文章原文为Dr. Charles Severance 的 <Python for Informatics> ...

  2. Python for Infomatics 第13章 网页服务三(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.6 应用程序接口API 现 ...

  3. Python for Infomatics 第13章 网页服务一(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 一旦利用程序通过HTTP协议获得 ...

  4. Python for Infomatics 第12章 网络编程二(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.3 用HTTP协议获取一张 ...

  5. Linux就这个范儿 第13章 打通任督二脉

    Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...

  6. #Python学习笔记:1-3章 (基于《python编程,从入门到实践)

    第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...

  7. Python for Infomatics 第12章 网络编程六(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.9 词汇表 Beautif ...

  8. Python for Infomatics 第12章 网络编程四(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.7 用BeautifulS ...

  9. Python for Infomatics 第12章 网络编程一(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 本书中的许多例子关注的是读取文件 ...

随机推荐

  1. [转载]tomcat的配置文件server.xml不支持中文注释的解决办法

    原文链接:http://tjmljw.iteye.com/blog/1500370 启动tomcat失败,控制台一闪而过,打开catalina的log发现错误指向了conf/server.xml,报错 ...

  2. WinForm用户控件、动态创建添加控件、timer控件--2016年12月12日

    好文要顶 关注我 收藏该文 徐淳 关注 - 1 粉丝 - 3       0 0     用户控件: 通过布局将多个控件整合为一个控件,根据自己的需要进行修改,可对用户控件内的所有控件及控件属性进行修 ...

  3. setprecision **fixed

    #include <iostream> #include <iomanip> using namespace std; int main( void ) { const dou ...

  4. dex文件格式三

    先来看看整体的结构,结构体定义在DexFile.h里面   在dexFileSetupBasicPointers中设置各个子结构体,当然是在解析DexHeader之后 源码在DexFile.c文件中 ...

  5. erlang 虚机CPU 占用高排查

    -问题起因 近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4.排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查 找到通过erlang:statistics( ...

  6. MicrosoftWord2013基本用法

    MicrosoftWord2013基本用法 Word联机使用 自定义工作区 单击"文件"选项,单击"自定义功能区".显示的就是我们编辑文档时上方的工具栏所有选项 ...

  7. iOS 私有变量 私有方法

    实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在 ...

  8. ASP中Lable控件的定位问题

    问题:Lable控件的定位问题:找了好久都没找到可以将Lable控件定位的办法,网上说可以将修改position这个属性来实现定位,可是我始终没找到这个属性. (1)首先,在源代码中添加 style ...

  9. 模拟搭建Web项目的真实运行环境(四)

    本篇介绍如何部署mongodb环境,主要分为三个部分: 第一部分 介绍如何在ubuntu下安装mongodb, 第二部分 介绍如何在windows下安装使用MongoChef客户端, 第三部分 介绍在 ...

  10. Android中自定义控件TextSize属性问题

    本文主要说明一个自定义控件添加TextSize属性的坑,刚刚从坑里面爬出来,写个随笔,记录一下: *************************************************** ...