所以我一直在和Json玩耍,并进行一些比较。
所以基本上我有一个Json,其中某些元素包含在某些元素中,而有些则不包含。
我遇到的问题是脚本不断重复执行脚本,但是由于无法找到元素等异常而无法执行任何操作,例如 Price , estimatedLaunchDate 将在此Json中找到
sample = {
"threads": [{
"seoTitle": "used food",
"other_crap": "yeet"
},
{
"seoTitle": "trucks",
"other_crap": "it's a fox!"
"product": {
"imageUrl": "https://imagerandom.jpg",
"price": {
"fullRetailPrice": 412.95
},
"estimatedLaunchDate": "2018-06-02T03:00:00.000",
"publishType ": "DRAW"
},
{
"seoTitle": "rockets",
"other_crap": "i'm rocket man"
},
{
"seoTitle": "helicopter",
"other_crap": "for 007"
"product": {
"imageUrl": "https://imagerandom.jpg",
"price": {
"fullRetailPrice": 109.95
},
"estimatedLaunchDate": "2018-06-19T00:00:00.000",
"publishType": "FLOW"
}
}
]
}
如您所见,某些json元素比其他元素有一些额外的信息,这是我遇到的问题,请问如何/如何使其能够继续使用或仅添加等内容“找到” ,“未找到publishType” ,并且仍然继续其余json吗?
到目前为止,我已经编写了执行此操作的代码:
old_list = []
while True:
try:
resp = requests.get("www.helloworld.com")
new_list = resp.json()['threads']
for item in new_list:
newitemword = item['seoTitle']
if newitemword not in old_list:
try:
print(newitemword) #item name
print(str(item['product']['price']['fullRetailPrice']))
print(item['product']['estimatedLaunchDate'])
print(item['product']['publishType'])
old_list.append(newitemword)
except Exception as e:
print(e)
print("ERROR")
time.sleep(5)
continue
else:
randomtime = random.randint(40, 60)
time.sleep(randomtime)
您可以看到tryexcept方法内部有4个打印,如果这3个打印之一(fullRetailPrice,estimateLaunchDate,publishType),它将抛出异常,并且不会继续执行其余代码,这意味着它会在"seoTitle": "trucks",
元素!
答案 0 :(得分:1)
我不会重写您的整个示例,但是假设您在查找值时会
print(str(item['product']['price']['fullRetailPrice']))
您遵循的这些键中的一个或多个可能不存在。您可以通过执行以下操作在代码中检测到
foo = item.get('product', {}).get('price', {}).get('fullRetailPrice')
if foo:
print(str(foo))
else:
print('Retail price could not be found')
get
的第二个参数是在找不到所需键的情况下返回的值。将其返回为空字典{}
将使您继续检查行直到最后。如果找不到任何键,则最后一个get
将返回None
。然后,您可以检查foo
是否为None并适当地打印错误消息。