使用python检查json响应中“rain”一词的出现

问题描述 投票:0回答:1

我想在下面的JSON响应中找出rain这个词的出现,我编写了下面的python代码,并附加了JSON响应和我在控制台中得到的错误。

我想检查'main'中的'description''weather'的值来检查它是否包含字符串或子字符串'rain'所以它应该为'1''Rain''rain''heavy rain'打印'Heavy rain'

如果1出现在JSON响应中,我希望得到rain的输出,否则0

import requests, json

r = requests.get("climate api link") 

r= json.loads(r.text)
r['weather']
def search(values, searchFor):
    for k in values:
        for v in values[k]:
            if searchFor in v:
                return k
    return None



search(r, 'Rain')

JSON响应:

{
   "coord":{
      "lon":72,
      "lat":19
   },
   "weather":[
      {
         "id":800,
         "main":"Clear",
         "description":"clear sky",
         "icon":"01n"
      }
   ],
   "base":"stations",
   "main":{
      "temp":300.255,
      "pressure":1025.08,
      "humidity":95,
      "temp_min":300.255,
      "temp_max":300.255,
      "sea_level":1025.12,
      "grnd_level":1025.08
   },
   "wind":{
      "speed":4.66,
      "deg":334.002
   },
   "clouds":{
      "all":0
   },
   "dt":1520266101,
   "sys":{
      "message":0.0043,
      "country":"IN",
      "sunrise":1520213280,
      "sunset":1520255940
   },
   "id":6619349,
   "name":"Breach Candy, Mumbai",
   "cod":200
}

这是我得到的错误

  File "<ipython-input-3-a5896a25aff8>", line 16, in <module>
    search(r, 'Rain') #prints firstName
  File "<ipython-input-3-a5896a25aff8>", line 9, in search
    for v in values[k]:
TypeError: 'int' object is not iterable
python json python-3.x
1个回答
0
投票

如果您只查找特定键,则不要尝试迭代其他所有键。你传入了整个字典,而不仅仅是r['weather']列表。

如果rainRain都应该计算,你还需要小写该值。

接下来,我将返回一个布尔值,这是“是”或“否”问题的标准答案。打印时,可以随意将该值转换为'1''0'

def weather_search(response, keyword):
    """Searches the weather main and description fields for given keyword"""
    keyword = keyword.lower()
    for entry in response['weather']:
        for key in ('main', 'description'):
            if keyword in entry.get(key, '').lower():
                return True

    # nothing found
    return False

# printing 1 or 0
print('1' if weather_search(r, 'rain') else '0') 
© www.soinside.com 2019 - 2024. All rights reserved.