zoukankan      html  css  js  c++  java
  • 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来保存内部文档。

  • 相关阅读:
    [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
    [收藏转贴]构建RESTful风格的WCF服务
    [转贴] C/C++中动态链接库的创建和调用
    [转贴]WebService的简单实现 C++
    谷歌已经对Android的开源严防死守
    如何成为一名黑客?
    当程序员思路被打断
    编辑语言是这样的
    开发者需要掌握多少门语言?
    程序员的六大优势
  • 原文地址:https://www.cnblogs.com/zhengsh/p/5447515.html
Copyright © 2011-2022 走看看