【问题标题】:Conditional statement to check if a JSON key is null with Python 3使用 Python 3 检查 JSON 键是否为空的条件语句
【发布时间】:2017-12-31 23:14:24
【问题描述】:

已对此进行了更新,以澄清问题,以便将来更好地帮助其他人。


我正在尝试使用 if 语句来测试密钥 classes 是否存在于使用 Python 的 JSON 结构中。使用 Python 检查 JSON 结构中是否存在密钥。我能够得到密钥,但需要帮助找出条件应该是什么以检查它是否存在。

当它存在于 JSON 结构中时,我使用以下代码成功地返回了键 class 的值:

#Parameter: json_data - The JSON structure it is checking
def parse_classes(json_data):
    lst = list()
    if('classes' is in json_data['images'][0]['classifiers'][0]): #This doesn't work
        for item in json_data['images'][0]['classifiers'][0]['classes']: 
            lst.append(item['class'])
    else:
        lst = None

    return(lst)

示例json_data

{"images": ["classifiers": ["classes": ["class": "street"]]]}

我的问题似乎在第 4 行,问题似乎是条件语句不正确。我需要对 if 语句进行哪些更改才能使其正常工作?

【问题讨论】:

  • for item in json_data['images'][0]['classifiers'][0]['classes']: 不应该是for item in classes 吗?
  • 你需要检查len(json_data['images']),然后检查len(json_data['images'][0]['classifiers'])
  • 您的屏幕截图与您发布的代码不匹配(类的引号与无引号)。我首先编辑它,但 cmd 回答让我回滚。
  • 它不起作用,那么它如何使用或不使用引号?

标签: python json if-statement conditional conditional-statements


【解决方案1】:

我想你的意思是if 而不是for

def parse_classes(json_data):
    lst = set()
    if 'classes' in json_data['images'][0]['classifiers'][0]:
        for item in json_data['images'][0]['classifiers'][0]['classes']:
            lst.add(item['class'])
    else:
        print("")
    return lst

或防御性

def parse_classes(json_data):
    lst = set()
    if (json_data.get('images')
            and json_data['images'][0].get('classifiers')
            and json_data['images'][0]['classifiers'][0].get('classes')):
        for item in json_data['images'][0]['classifiers'][0].get('classes', []):
            lst.add(item['class'])
    return lst if lst else None

如果你想要全部class 全部classifiers 全部images

def parse_classes(json_data):
    lst = set()
    for image in json_data.get('images', []):
        for classifier in image.get('classifiers', []):
            for item in classifier.get('classes', []):
                lst.add(item['class'])
    return lst if lst else None

【讨论】:

  • 还是说IndexError: List index out of range
  • 它适用于您提供的 json 数据。你有失败时的数据吗?
  • json_data['images'][0]['classifiers'][0] 在子列表之一中必须为空。无法复制
  • @cmd 我添加了代码。对于您的第二件事,它仍然说列表索引超出范围。
  • 需要查看完整的错误和/或出错的数据。
猜你喜欢
  • 2015-07-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多