• python接口自动化5-Json数据处理


    前言

    有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理。

    一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的参数就行,这时候就需要json来解析返回的数据了。

    一、json模块简介

    1.Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式,常用于http请求中

    2.可以用help(json),查看对应的源码注释内容

    Encoding basic Python object hierarchies::
        
            >>> import json
            >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
            '["foo", {"bar": ["baz", null, 1.0, 2]}]'
            >>> print json.dumps(""fooar")
            ""fooar"
            >>> print json.dumps(u'u1234')
            "u1234"
            >>> print json.dumps('\')
            "\"
            >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
            {"a": 0, "b": 0, "c": 0}
            >>> from StringIO import StringIO
            >>> io = StringIO()
            >>> json.dump(['streaming API'], io)
            >>> io.getvalue()
            '["streaming API"]'

    二、Encode(python->json)

    1.首先说下为什么要encode,python里面bool值是True和False,json里面bool值是true和false,并且区分大小写,这就尴尬了,明明都是bool值。

    在python里面写的代码,传到json里,肯定识别不了,所以需要把python的代码经过encode后成为json可识别的数据类型。

    2.举个简单例子,下图中dict类型经过json.dumps()后变成str,True变成了true,False变成了fasle

    3.以下对应关系表是从json模块的源码里面爬出来的.python的数据类,经过encode成json的数据类型,对应的表如下
         |  | Python              | JSON          |
         |  +===================+===============+
         |  | dict                  | object        |
         |  +-------------- -----+---------------+
         |  | list, tuple          | array         |
         |  +-------------------+---------------+
         |  | str, unicode      | string        |
         |  +-------------------+---------------+
         |  | int, long, float  | number        |
         |  +-------------------+---------------+
         |  | True                | true          |
         |  +-------------------+---------------+
         |  | False             | false         |
         |  +-------------------+---------------+
         |  | None              | null          |
         |  +-------------------+---------------+

    三、decode(json->python)

    1.以第三篇的登录成功结果:{"success":true}为例,我们其实最想知道的是success这个字段返回的是True还是False

    2.如果以content字节输出,返回的是一个字符串:{"success":true},这样获取后面那个结果就不方便了

    3.如果经过json解码后,返回的就是一个字典:{u'success': True},这样获取后面那个结果,就用字典的方式去取值:result2["success"]

    4.同样json数据转化成python可识别的数据,对应的表关系如下

    |  +---------------+-------------------+
         |  | JSON               | Python            |
         |  +===============+===================+
         |  | object             | dict              |
         |  +---------------+-------------------+
         |  | array               | list              |
         |  +---------------+-------------------+
         |  | string              | unicode           |
         |  +---------------+-------------------+
         |  | number (int)    | int, long         |
         |  +---------------+-------------------+
         |  | number (real)   | float             |
         |  +---------------+-------------------+
         |  | true                | True              |
         |  +---------------+-------------------+
         |  | false               | False             |
         |  +---------------+-------------------+
         |  | null                 | None              |
         |  +---------------+-------------------+

    四、案例分析

    1.比如打开快递网:http://www.kuaidi.com/,搜索某个单号,判断它的状态是不是已签收

    2. 实现代码如下

    五、参考代码:

    # coding:utf-8
    import requests

    url = "http://www.kuaidi.com/index-ajaxselectcourierinfo-1202247993797-yunda.html"
    headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
               }  # get方法其它加个ser-Agent就可以了

    s = requests.session()
    r = s.get(url, headers=headers,verify=False)
    result = r.json()
    data = result["data"]   # 获取data里面内容
    print data
    print data[0]         # 获取data里最上面有个
    get_result = data[0]['context']  # 获取已签收状态
    print get_result


    if u"已签收" in get_result:
        print "快递单已签收成功"
    else:
        print "未签收"

    ---------------------------------python接口自动化完整版-------------------------

    全书购买地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695


    作者:上海-悠悠 QQ交流群:588402570

    也可以关注下我的个人公众号:

  • 相关阅读:
    SpringMVC总结
    Linux执行.sh文件,提示No such file or directory的问题的解决方法
    eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled
    Windows下调试hadoop
    【转】Markdown 的一些问题
    【转】论“我”和“我们”
    【转】什么是启发
    【转】Scheme 编程环境的设置
    【转】我为什么离开 Cornell
    【转】Currying 的局限性
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/6843514.html
Copyright © 2020-2023  润新知