【问题标题】:How to check for what JSON data exists in a Python HTTP Request?如何检查 Python HTTP 请求中存在哪些 JSON 数据?
【发布时间】:2021-04-17 14:46:13
【问题描述】:

我正在使用 Python 编写一个脚本,该脚本将使用我在网上找到的 API 生成笑话。 (https://sv443.net/jokeapi/v2/)。然而,笑话的一些设置/问题部分使用 JSON 数据,它在“设置”和“笑话”之间变化。我正在寻找是否可以编写一个脚本来检查响应是拉哪一个。我的脚本在这里:

import requests
import json

def getJoke():
  response = requests.get("https://v2.jokeapi.dev/joke/Any")
  print(response.text)
  json_data = json.loads(response.text)
  joke = json_data['joke'] + json_data['setup'] + " " + json_data['delivery']
  print(joke)

getJoke()

有些回答是

    "error": false,
    "category": "Christmas",
    "type": "twopart",
    "setup": "How will Christmas dinner be different after Brexit?",
    "delivery": "No Brussels!",

    "error": false,
    "category": "Programming",
    "type": "twopart",
    "joke": "Why is Linux safe?",
    "delivery": "Hackers peak through Windows only.",

有没有办法检查响应获得的数据名称?

【问题讨论】:

    标签: python json python-requests


    【解决方案1】:

    有两种类型的笑话。单衬里和多部分衬里。

    单行笑话:

    {
        "error": false,
        "category": "Pun",
        "type": "single",
        "joke": "To whoever stole my copy of Microsoft Office, I will find you. You have my Word!",
        "flags": {
            "nsfw": false,
            "religious": false,
            "political": false,
            "racist": false,
            "sexist": false,
            "explicit": false
        },
        "id": 191,
        "safe": true,
        "lang": "en"
    }
    

    多部分笑话:

    {
        "error": false,
        "category": "Programming",
        "type": "twopart",
        "setup": "Why do programmers prefer using the dark mode?",
        "delivery": "Because light attracts bugs.",
        "flags": {
            "nsfw": false,
            "religious": false,
            "political": false,
            "racist": false,
            "sexist": false,
            "explicit": false
        },
        "id": 232,
        "safe": true,
        "lang": "en"
    }
    

    您需要在查询其他 json 元素之前检查笑话类型。

    import requests
    import json
    
    def getJoke():
      response = requests.get("https://v2.jokeapi.dev/joke/Any")
      json_data = json.loads(response.text)
      joke_type = json_data['type']
      if joke_type == 'single':
          joke = json_data['joke']
      elif joke_type == 'twopart':
        joke_setup = json_data['setup']
        joke_delivery = json_data['delivery']
        print (f'Joke Setup: {joke_setup} \nJoke Delivery: {joke_delivery}')
        # output
        Joke Setup: Why does Dr. Pepper come in a bottle?
        Joke Delivery: His wife is dead.
    
    
    getJoke()
    

    【讨论】:

      【解决方案2】:

      检查所有数据字段名称:

      json_data = json.loads(response.text)
      fields = json_data.keys()
      

      然后检查jokesetup是否在字段名称内:

      "joke" in fields
      "setup" in fields
      

      【讨论】:

      • 现在在使用 ``` fields = json_data.keys() if "setup" in fields 时出现新错误:joke = json_data['setup'] + " " + json_data['delivery' ] else: 笑话 = json_data['joke'] + " " + json_data['delivery'] ``` 它说笑话 = json_data['joke'] + " " + json_data['delivery'] KeyError: 'delivery'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2011-03-26
      • 1970-01-01
      • 2020-01-08
      • 2017-01-05
      • 2021-12-30
      相关资源
      最近更新 更多