if-Else条件在Python中使用JSON格式来确定要附加到列表中的RAW
我正在从一系列与某个ID相关联的JSON文件开始生成一个数据集(if-Else条件在Python中使用JSON格式来确定要附加到列表中的RAW,python,json,python-3.x,if-statement,Python,Json,Python 3.x,If Statement,我正在从一系列与某个ID相关联的JSON文件开始生成一个数据集(authors\u df包含一组ID),我正在使用for来实现这一点。 我尝试了一些作者,效果很好 问题在于某些id的Json文件不完整。因此,我试图包含一些“其他”条件,使代码也能处理不完整的数据(长度为0的json文件)。 问题是我不知道怎么做 我尝试了if len(json_值['resonanceCategorizations']['1']['fullData'])>0否则为空 但它不起作用(KeyError:'1')。我想
authors\u df
包含一组ID),我正在使用for
来实现这一点。
我尝试了一些作者,效果很好
问题在于某些id的Json文件不完整。因此,我试图包含一些“其他”条件,使代码也能处理不完整的数据(长度为0的json文件)。
问题是我不知道怎么做
我尝试了if len(json_值['resonanceCategorizations']['1']['fullData'])>0否则为空
但它不起作用(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}®ionId=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
如果没有数据,基本上创建一个“null”JSON值作为默认值输入
或者,如果我可以避免在没有数据的情况下附加作者,那就好了。如果您在字典中缺少键时遇到问题,请查看从字典中返回默认值
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')
问题是,不清楚未找到哪个键,如果未找到'resonanceCategorizations'
或'1'
,则无法对其应用len
你可以采取两种方法。第一种方法是使用dict.get
方法。考虑下面的例子:
my_dict={“a”:1,“b”:2}
打印(my_dict[“a”])#打印1
打印(我的dict.get(“a”))#打印1
打印(我的dict.get(“a”,无))#打印1
打印(my_dict[“c”])#引发关键错误
打印(my_dict.get(“c”)#引发关键错误
打印(我的dict.get(“c”,无))#无打印
通过这种方式,您可以检查字典中是否存在给定字段,当然,每次访问字段时都需要执行此操作,并处理输出是否为无
另一种方法是使用try-catch块
试试看:
value=some_字典[“a”][“b”][“c”]
除KeyError外:
值=无
这种方法的缺点是,您不知道a
、a.b
或a.b.c
是否丢失了。根据错误,似乎resonanceCategorizations
并不总是具有键1
,而且null
在Python中不是有效的术语,特别是因为您尚未定义它。