首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -检查json数组是否有多个对象

Python -检查json数组是否有多个对象
EN

Stack Overflow用户
提问于 2022-08-12 10:39:15
回答 2查看 74关注 0票数 1

我试图解析来自路由器输出的数据,但是有时两个重复的值。因此,我需要检查三种可能性,一个MAC,两个MAC和没有MAC。

这就是我目前的情况:

代码语言:javascript
复制
            else: #Starts the parse
                parser5 = ttp(output5, template_05_ad)
                parser5.parse()
                #put result in JSON format
                results_0 = parser5.result(format='json')[0]
                #str to list **convert with json.loads
                result_0 = json.loads(results_0)

                #Places the results into variables
                if 'mac' in result_0[0][0]:
                    mac_connected = str(result_0[0][0]['mac'])
                elif 'mac' in result_0[0]:
                    mac_connected = str(result_0[0]['mac'])
                else:
                    mac_connected = 'NULL'

输出如下:

代码语言:javascript
复制
One MAC:
                                                             CE 
Vlan     Mac Address       Type        Interface      CTag  Vlan
----  -----------------  ---------  ----------------  ----  ----
4065  E1:B4:19:64:1B:51  Dynamic    10/0/1@1/2/2      na    na  
Total MAC addresses for this criterion: 1

Two MAC:
                                                             CE 
Vlan     Mac Address       Type        Interface      CTag  Vlan
----  -----------------  ---------  ----------------  ----  ----
4065  E1:B4:19:64:1B:51  Dynamic    10/0/1@1/2/2      na    an  
4065  E1:B4:19:64:1B:51  Dynamic    10/0/1@1/2/2      na    na  
Total MAC addresses for this criterion: 1

No MAC:
No MAC addresses found for this criterion

当它被解析时,它将如下所示(来自result_0的打印输出):

代码语言:javascript
复制
One MAC::
[{'mac': 'E1:B4:19:64:1B:51'}]

Two MAC:
[[{'mac': 'E1:B4:19:64:1B:51'}, {'mac': 'E1:B4:19:64:1B:51'}]]

No MAC:
[{}]

对不起,如果您之前已经回答了这个问题,我们将非常感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-12 11:30:08

如果我正确理解,您可以得到一个字典列表或一个json字典作为result_0[0]的值。

您可以先检查它是否是一个列表。因为您总是只对第一个mac值感兴趣,所以在这种情况下可以只使用第一个list元素。如果然后使用带有默认值的.get()方法,则不需要将空情况单独处理:

代码语言:javascript
复制
            else: #Starts the parse
                parser5 = ttp(output5, template_05_ad)
                parser5.parse()
                #put result in JSON format
                results_0 = parser5.result(format='json')[0]
                #str to list **convert with json.loads
                result_0 = json.loads(results_0)

                if isinstance(result_0[0], list):
                    result_0[0] = result_0[0][0]

                #Places the results into variables
                mac_connected = result_0[0].get('mac', 'NULL')

(这假设在列表的情况下,最终想要的mac结果总是在result[0][0]中)

另一种选择可能是以某种方式调整您的TTP模板,以便它首先总是返回一个列表(即使其中只有一个元素)。

票数 1
EN

Stack Overflow用户

发布于 2022-08-12 11:16:14

我不确定您希望如何返回数据,但这可能会帮助您更接近解决方案?

代码语言:javascript
复制
def CheckMAC(mac):
    connected_mac = ""
    for value in mac:
        if value:
            if isinstance(value, dict):
                return(value['mac'])
            elif isinstance(value, list):
                for nested_value in value:
                    connected_mac += f"{nested_value['mac']} "
                return(connected_mac.strip())
        else:
            return("NULL")

oneMAC = [{'mac': 'E1:B4:19:64:1B:51'}]
twoMAC = [[{'mac': 'E1:B4:19:64:1B:51'}, {'mac': 'E1:B4:19:64:1B:51'}]]
noMAC = [{}]

print(CheckMAC(oneMAC))
print(CheckMAC(twoMAC))
print(CheckMAC(noMAC))

结果:

代码语言:javascript
复制
E1:B4:19:64:1B:51
E1:B4:19:64:1B:51 E1:B4:19:64:1B:51
NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73332855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档