首页 > 解决方案 > if-Else 条件在 Python 中使用 JSON 格式来确定要附加到列表的原始数据

问题描述

我正在从与某个 ID 关联的一系列 JSON 文件(authors_df包含一堆 id)开始生成一个数据集,我正在使用for它来执行此操作。我尝试了一部分作者,效果很好。

问题是某些 id 的 Json 文件不完整。因此,我尝试包含一些“其他”条件,以使代码也适用于不完整的数据(长度为 0 的 json 文件)。 问题是我不知道该怎么做。

我试过了if len(json_value['resonanceCategorizations']['1']['fullData']) > 0 else null

但它不起作用(KeyError: '1')。我想我必须设置一个包含完整文件的 JSON 结构的不同条件,而不是使用null

这是我的代码,一切正常,但问题在于 else null 行。

json_values_per_author = {}
datalist = []
datadict = {}

for index, row in authors_df.iterrows():
    #get the author
    author = row['author']
    print(author)

#build the url
url = f'http://keystone-db.default.svc.cluster.local:5000/keystonedb/profiles/resonance/categorization?profileId={author}&regionId=1'    

#get the json value
json_value = requests.get(url).json()
full_data = json_value['resonanceCategorizations']['1']['fullData'] if len(json_value['resonanceCategorizations']['1']['fullData']) > 0 else null

datalist.append({
    "author": author,

    "seed1": full_data[0]['seed'],

    "seed2": full_data[1]['seed'] if len(full_data) > 2 else 'NA',

    "seed3": full_data[2]['seed'] if len(full_data) > 3 else 'NA'

})

我尝试的另一件事是

 z = {"000": [{"seed": 0, "globalSegmentId": 0, "globalSegmentName": "Nope", "regionId": 0, "resonance": 0, "isGlobal": true, "globalRegion": 1}]}


full_data = json_value['resonanceCategorizations']['1']['fullData'] if len(json_value['resonanceCategorizations']['1']['fullData']) > 0 else z

如果没有数据,基本上创建一个“空”JSON 值作为默认输入

或者,如果我可以避免在没有数据的情况下附加作者,那会很好。

标签: pythonjsonpython-3.xif-statement

解决方案


如果您遇到字典中缺少键的问题,请查看从字典中返回默认值

get(key[, default])
Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.

所以在你的情况下它可能看起来像

full_data = json_value.get('resonanceCategorizations', {}).get('1', {}).get('fullData')

推荐阅读