如果不存在另一个json文件,则返回json文件中的数据



下载后,我试图从Overpass API JSON数据将数据返回到Django模型

"elements": [
{
"type": "node",
"id": 662934404,
"lat": 35.572157,
"lon": 45.3898839,
"tags": {
"addr:postcode": "46001",
"name": "City Center",
"name:en": "City Center Mall",
"name:ku": "City Center Mall",
"shop": "mall",
"website": "http://www.citycentersul.com"
}
},
{
"type": "node",
"id": 2413990402,
"lat": 35.5014386,
"lon": 45.4457576,
"tags": {
"addr:city": "sulaymaniyah",
"designation": "ASSAN",
"name": "ASSAN STEEL CO.",
"opening_hours": "3 min",
"shop": "doityourself",
"source": "ASSAN Steel Company General  Trading  Co, Ltd"
},
{
"type": "node",
"id": 2414374708,
"lat": 35.506121,
"lon": 45.4417229,
"tags": {
"addr:city": "sulaymaniyah",
"name:ku": "ASSAN Steel Company General Trading Co, Ltd",
"shop": "doityourself",
}
},

但是一些数据dosent将它们两者一起CCD_ 1那么,如果name为none,那么我该怎么办?然后返回name:ku,如果它存在,那么name:en-

我试过了,但不起作用

with open('data.json') as datafile:
objects = json.load(datafile)
for obj in objects['elements']:
try:
objType = obj['type']
if objType == 'node':
tags = obj['tags']
name = tags.get('name')
if not name:
name = tags.get('name:en')
elif not name:
name = tags.get('name:ku')
elif not name:
name = tags.get('name:ar')
else:
name = tags.get('shop','no-name')

我还错过了什么吗?感谢您帮助

您可以循环所有可能的键,并在检测到值后停止:

with open('data.json') as datafile:
objects = json.load(datafile)
for obj in objects['elements']:
objType = obj['type']
if objType == 'node':
tags = obj['tags']
name = None
for nameId in ('name', 'name:en', 'name:ku', 'name:ar'):
if nameId in tags:
name = tags[name]
break # stop looping, we got a name value
# Set default if no key was found
if not name:
name = tags.get('shop','no-name')

以下和所有后续的elif-条件都是错误的:

name = tags.get('name')
if not name:
name = tags.get('name:en')
elif not name:
name = tags.get('name:ku')

CCD_ 3适用于所有先前条件,并且仅当所有先前条件被评估为CCD_。然而,在您的情况下,第一个if条件(if not name(已经计算为true。因此,您的elif-条件不会被执行。您需要将它们更改为if-条件:

name = tags.get('name')
if not name:
name = tags.get('name:en')
if not name:
name = tags.get('name:ku')
if not name:
name = tags.get('name:ar')
if not name:
name = tags.get('shop','no-name')

Maurice年提出的loop-方法https://stackoverflow.com/a/60810856/1340631更好。

最新更新