zoukankan      html  css  js  c++  java
  • 006 python接口 json

    /*
    时间:2018/09/22
    功能:session
    目录:
        一: 转换
    1 作用 2 对应表 3 举例 4 结论 二: 相互转换 1 python - json 2 json - python 三: 三者关系: dict json str 1 dict <-> json 2 dict <-> str 3 str <-> json 四: 应用: 1 登录禅道 2 提取数据 - 自解析 3 提取数据 - requests解析 五: Error: 1 2
    */

    一: 转换

      1 作用

    1 python某种数据格式的数据 -> Json格式 -> Java或其他语言的某种数据格式的数据
    2 A语言数据的数据 -> Json格式 -> B语言数据的数据
    3 这时候就可以使用java或B语言,对数据进行操作。

      2 对应表

    JSON            Python    
    object          dict
    array           list 
    string          str 
    number(int)     int 
    number(real)    float 
    true            True 
    false           False
    null            None
    dict            object(str)
    list/tuple      array 
    str/unicode     string 
    int/long/float  number

      3 举例

    python int -> Json number(int)

    # coding:utf-8
    import json
    
    pyNum = 123
    print(pyNum)
    print(type(pyNum))
    
    jsnNum = json.dumps(pyNum)    # 数据转换 : python - json
    print(jsnNum)
    print(type(jsnNum))
    123
    <class 'int'>
    123
    <class 'str'>

    python None -> Json null

    # coding:utf-8
    import json
    
    pyNone = None
    print(pyNone)
    print(type(pyNone))
    
    jsNull = json.dumps(pyNone)
    print(jsNull)
    print(type(jsNull))
    None
    <class 'NoneType'>
    null
    <class 'str'>

     python False -> Json false

    # coding:utf-8
    import json
    
    pyFalse = False
    print(pyFalse)
    print(type(pyFalse))
    
    jsFalse = json.dumps(pyFalse)
    print(jsFalse)
    print(type(jsFalse))
    False
    <class 'bool'>
    false
    <class 'str'>

    python str -> Json string

    # coding:utf-8
    import json
    
    pyString = "String"
    print(pyString)
    print(type(pyString))
    
    jsString = json.dumps(pyString)
    print(jsString)
    print(type(jsString))
    String
    <class 'str'>
    "String"
    <class 'str'>

    python list -> Json array

    # coding:utf-8
    import json
    
    pyList = [None, 123, "asd", False]
    print(pyList)
    print(type(pyList))
    
    jsList = json.dumps(pyList)
    print(jsList)
    print(type(jsList))
    [None, 123, 'asd', False]
    <class 'list'>
    [null, 123, "asd", false]
    <class 'str'>

    python dict -> Json object

    # coding:utf-8
    import json
    
    pyDict = {
        123: 123,
        True: True,
        None: None,
        "string": 'string',
        "tuple": (1, "tuple"),
        "list": [1, 1.1, "str"]
    }
    print(pyDict)
    print(type(pyDict))
    
    jsDict = json.dumps(pyDict)
    print(jsDict)
    print(type(jsDict))
    {123: 123, True: True, None: None, 'string': 'string', 'tuple': (1, 'tuple'), 'list': [1, 1.1, 'str']}
    <class 'dict'>
    {"123": 123, "true": true, "null": null, "string": "string", "tuple": [1, "tuple"], "list": [1, 1.1, "str"]}
    <class 'str'>

      4 结论:

    所有json格式都是字符串

    二: 相互转换
      1 python - json

    # coding:utf-8
    import json
    
    pDict = {
        123: 123,
        True: True,
        None: None,
        "string": 'string',
        "tuple": (1, "tuple"),
        "list": [1, 1.1, "str"]
    }
    print(pDict)
    print(type(pDict))
    
    jDict = json.dumps(pDict)
    print(jDict)
    print(type(jDict))
    {123: 123, True: True, None: None, 'string': 'string', 'tuple': (1, 'tuple'), 'list': [1, 1.1, 'str']}
    <class 'dict'>
    {"123": 123, "true": true, "null": null, "string": "string", "tuple": [1, "tuple"], "list": [1, 1.1, "str"]}
    <class 'str'>

      2 json - python

    # coding:utf-8
    import json
    
    jsDict = '{"123": 123, "true": true, "null": null, "string": "string", "tuple": [1, "tuple"], "list": [1, 1.1, "str"]}'
    print(jsDict)
    print(type(jsDict))
    
    pyDict = json.loads(jsDict)
    print(pyDict)
    print(type(pyDict))
    {"123": 123, "true": true, "null": null, "string": "string", "tuple": [1, "tuple"], "list": [1, 1.1, "str"]}
    <class 'str'>
    {'123': 123, 'true': True, 'null': None, 'string': 'string', 'tuple': [1, 'tuple'], 'list': [1, 1.1, 'str']}
    <class 'dict'>


    三: 三者关系 dict json str
      1 dict <-> json

    # dict <-> json   
        dict -> json: json.dumps
        dict <- json: json.loads 

      2 dict <-> str

    # dict <-> str    
        dict -> str: str()
        dict <- str: eval()

    dict -> str

    # coding:utf-8
    import json
    
    a = {"a": True, "b": None}
    print(a)
    print(type(a))
    
    str = str(a)
    print(str)
    print(type(str))
    {'a': True, 'b': None}
    <class 'dict'>
    {'a': True, 'b': None}
    <class 'str'>

    dict <- str

    # coding:utf-8
    import json
    
    b = "{'a': True, 'b': None}"    # python标准dict格式字符串
    print(b)
    print(type(b))
    
    c = eval(b)
    print(c)
    print(type(c))
    {'a': True, 'b': None}
    <class 'str'>
    {'a': True, 'b': None}
    <class 'dict'>

      3 str <-> json

    # str <-> json 
        str -> json: 格式是字符串、内容是字典、类型是json
        str <- json: 等价于

    str -> json         
    # coding:utf-8
    
    import json
    b = '{"a": null, "b": true}'    # 格式是<class 'str'>, 内容是<class 'dict'>,类型是json; json就是特定格式的字符串
    py_Dict = json.loads(b)
    print(py_Dict)
    print(type(py_Dict))
    {'a': None, 'b': True}
    <class 'dict'>

    error

    # coding:utf-8
    
    b = '{"a": Null, "b": true}'    # 改变: null - Null. json只有null。
    py_Dict = json.loads(b)
    print(py_Dict)
    print(type(py_Dict))
    NameError: name 'json' is not defined

    四: 应用:
      1

    # coding:utf-8
    import requests
    import json
    import urllib3
    urllib3.disable_warnings() # 忽略警告
    
    # 禅道登录
    url = "http://127.0.0.1/zentao/user-login.html"
    body = {
        "account": "admin",
        "password": "123456",
        "keepLogin[]": "on",
        "referer": "/zentao/my.html"
    }
    
    r = requests.post(url, data = body)
    
    print(r.status_code)
    print(r.content.decode("utf-8"))
    200
    <!DOCTYPE html>
    <html lang='zh-cn'>
    <head>
      <meta charset='utf-8'>
      <meta http-equiv='X-UA-Compatible' content='IE=edge'>
      <meta name="renderer" content="webkit"> 
      <title>用户登录 - 禅道</title>
    ...

      2 提取数据 - 自解析

    # coding:utf-8
    import requests
    import json
    url = "http://japi.juhe.cn/qqevaluate/qq"
    
    par = {
          "key": "xxxxxxxxxx",  # appkey需要注册申请
          "qq":  "xxxxxxxxxx"   # qq号码
           }
    r = requests.get(url, params=par)
    print(r.text)
    
    # 类型转换: 方法一
    pyDictResult = eval(r.text)         # 类型转换 : 字符串 -> 字典
    print(type(pyDictResult))
    
    # 类型转换: 方法二
    # pyDictResult = json.loads(r.text) # 类型转换 : json -> 字典
    # print(type(pyDictResult))
    
    print(pyDictResult["reason"])
    print(pyDictResult["result"]["data"]["conclusion"])
    {"error_code":0,"reason":"success","result":{"data":{"conclusion":"[凶]虽倾全力,难望成功,此数大凶,最好改名","analysis":"即使全力以赴,却没有取得成功。导致失败的原因是现时的待人处事方式有问题,要改变这个现状,要自我反省,改变一些令人厌恶的恶习,方可取得成功。"}}}
    <class 'dict'>
    success
    [凶]虽倾全力,难望成功,此数大凶,最好改名

      3 提取数据 - requests解析

    # coding:utf-8
    import requests
    
    url = "http://japi.juhe.cn/qqevaluate/qq"
    par = {
          "key": "xxxxxxxxxx",  # appkey需要注册申请
          "qq":  "xxxxxxxxxx"   # qq号码
           }
    
    r = requests.get(url, params=par)
    print(r.text)
    
    pyDictResult = r.json() # requests自带json解析器
    print(pyDictResult["reason"])
    print(pyDictResult["result"]["data"]["conclusion"])
    {"error_code":0,"reason":"success","result":{"data":{"conclusion":"[凶]虽倾全力,难望成功,此数大凶,最好改名","analysis":"即使全力以赴,却没有取得成功。导致失败的原因是现时的待人处事方式有问题,要改变这个现状,要自我反省,改变一些令人厌恶的恶习,方可取得成功。"}}}
    success
    [凶]虽倾全力,难望成功,此数大凶,最好改名

    五: Error:
      1

    AttributeError: module 'json' has no attribute 'dumps'    
    原因: 文件夹或者文件的名字叫json, 和模块json名称冲突

      2

    # coding:utf-8
    import json
    js_list = "[{'a': true, 'b': null}]"
    py_list = json.loads(js_list)
    print(py_list)
    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
    修改: js_list = '[{"a": true, "b": null}]'
  • 相关阅读:
    轮播图适应代码jQ
    jQuery focus、blur事件 添加、删除类名
    节点操作js jQuery
    动态加载jQuery
    底边滑动变色的列表
    节点选择只有链接
    第三方登录过程—OAuth2.0协议
    JavaScript中常谈的对象
    浅谈JavaSccript函数与对象
    JavaScript与DOM的关系
  • 原文地址:https://www.cnblogs.com/huafan/p/9693247.html
Copyright © 2011-2022 走看看