我正在使用Rest Api查找地址详细信息。我传递了一个地址,它传回了该地址的详细信息:lat / long,suburb等。我在响应中使用带有json()方法的请求库,并将json响应添加到列表中以便稍后进行分析
我发现的是,当地址只有一个匹配时,找不到地址' json响应中的key包含一个字典,但是当找到多个匹配时,' FoundAddress' key包含一个词典列表。
返回的json看起来像:
单场比赛:
{
'FoundAddress': {AddressDetails...}
}
对于多场比赛:
{
'FoundAddress': [{Address1Details...}, {Address2Details...}]
}
我不想编写代码来处理单个匹配然后多个匹配。
如何修改' FoundAddress'这样,当有一个匹配时,它会将其更改为包含单个字典条目的列表?这样我得到这样的东西:
{
'FoundAddress': [{AddressDetails...}]
}
答案 0 :(得分:1)
如果外部API以该格式发送响应,那么您无法真正更改FoundAddress
本身,因为它始终以该格式到达。
如果您愿意,可以更改回复,因为您可以完全控制收到的内容:
r = json.parse(response)
fixed = r['FoundAddress'] if (type(r['FoundAddress']) is list) else [r['FoundAddress']]
r['FoundAddress'] = fixed
或者,您可以在地址使用时间进行区分:
def func(foundAddress):
# work with a single dictionary instance here
然后:
result = map(func, r['FoundAddress']) if (type(r['FoundAddress']) is list) else [func(r['FoundAddress'])]
但说实话,我会明确表示:
if type(r['FoundAddress']) is list:
result = map(func, r['FoundAddress'])
else:
result = func(r['FoundAddress'])
或任何一天a if b else c
单行的响应修正。
答案 1 :(得分:0)
如果可以,我只想更改API。如果你不能,那你就无能为力。你只需处理特殊情况。您可以使用以下函数在代码中的一个位置执行此操作:
def handle_found_addresses(found_addresses):
if not isinstance(found_addresses, list):
found_addresses = [found_addreses]
...
然后从那里继续对找到的地址执行任何操作,就好像该值始终是包含一个或多个项目的列表一样。