Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if-Else条件在Python中使用JSON格式来确定要附加到列表中的RAW_Python_Json_Python 3.x_If Statement - Fatal编程技术网

if-Else条件在Python中使用JSON格式来确定要附加到列表中的RAW

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')。我想

我正在从一系列与某个ID相关联的JSON文件开始生成一个数据集(
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}&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
如果没有数据,基本上创建一个“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中不是有效的术语,特别是因为您尚未定义它。