Python-如果json元素“无效”,请尝试另一个

时间:2018-07-06 20:59:37

标签: python json if-statement

所以我一直在研究Json和Python,基本上我有一个Json文件,其中有时不包含某些元素,有时却不包含。基本上我想做的是检查包含“ ImageUrl”的第一个元素是否在那里并且有效,然后使用该元素,否则使用另一个imageURL

"threads": [{
    "id": "3a64a3b18894fb70c92b6382a1e8f735320c1cbb",
    "product": {
        "imageUrl": "https://hello.com/555088_401.JPG",
    },
    "imageUrl": "https://hello.com/images/555088_401.JPG",
}]

但是,第一个ImageURL可能在末尾包含999999_999,并且也被视为无效。

到目前为止,我所做的是:

resp = s.get(url)
item = resp.json()['threads']    

itempic = item.get('imageUrl')  # Check if there is sell date
if itempic:
   image = str(item['imageUrl'])  # Image pic          
else:
   print('Picture not found')

当前仅使用第二个URL imageUrl,这不是我想要的,但它确实起作用(它还会检查imageUrl是否还包含任何内容),问题是:

如何获取第一个imageUrl元素,并检查它是否“有效”,并且末尾不包含999999_999(如果有效且正确,则使用并打印),否则不是“有效”,则使用第二个imageUrl

1 个答案:

答案 0 :(得分:1)

您只需要检查为999999_999获得的任何值。如果您使用get方法“假装”缺少的URL是可以匹配的字符串,那么会更简单。

# This assumes that you want the top-level imageURL in preference to
# the product imageURL...
def get_url(d):
    for item in d['threads'], d['threads']['product']:
        url = item.get('imageUrl', '999999_999')
        if not re.match('999999_999', url):
            return url

如您所见,假装第二次尝试可以匹配999999_999,即使您知道不会匹配,也更简单。