json将字典项更改为包含一个字典的列表

时间:2017-11-02 22:50:52

标签: python json dictionary

我正在使用Rest Api查找地址详细信息。我传递了一个地址,它传回了该地址的详细信息:lat / long,suburb等。我在响应中使用带有json()方法的请求库,并将json响应添加到列表中以便稍后进行分析

我发现的是,当地址只有一个匹配时,找不到地址' json响应中的key包含一个字典,但是当找到多个匹配时,' FoundAddress' key包含一个词典列表。

返回的json看起来像:

单场比赛:

{
'FoundAddress': {AddressDetails...}
}

对于多场比赛:

{
'FoundAddress': [{Address1Details...}, {Address2Details...}]
}

我不想编写代码来处理单个匹配然后多个匹配。

如何修改' FoundAddress'这样,当有一个匹配时,它会将其更改为包含单个字典条目的列表?这样我得到这样的东西:

{
'FoundAddress': [{AddressDetails...}]
}

2 个答案:

答案 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]
         ... 

然后从那里继续对找到的地址执行任何操作,就好像该值始终是包含一个或多个项目的列表一样。

相关问题