3

在 Fedora 17 64bit 中同时使用 netifaces 和 json 导入。

我正在尝试以 JSON 格式获取这种格式

"net_info" : [
            {"nic" : ..., "mac" : ..., "ip" : ...},
            {"nic" : ..., "mac" : ..., "ip" : ...},
            {"nic" : ..., "mac" : ..., "ip" : ...},
            ]

我目前正在使用 astring并且只是附加到它,我得到了这个:

"'net_info': [{'nic':eth0,'mac':6c:f0:49:0f:e1:c2,'ip':192.168.1.116},]"

由于每个字符串开头和结尾的引号,这可能不起作用;有没有更好的方法来做到这一点?我当时正在考虑使用字典列表,但最终还是先尝试了字符串,不确定在这种情况下什么是最好的。

这是我的代码,包含 3 个列表:

def json_serialize(ip=[],mac=[],nic=[]):
    jsonDump = "'net_info': ["
    for i,item in enumerate(ip):
        jsonDump += "{'interface_name':" + nic[i] +",'mac':" 
                      + mac[i] + ",'ip':" + ip[i] +"},"
        jsonDump += "]"
        print jsonDump.strip()

    #Testing output after its passed in to json.dumps(), it now has quotes at beginning
    #and end of string...?
    print "\n"
    print     json.dumps(jsonDump)
4

1 回答 1

4

只需创建一个dict包含的 python list,然后一次性将其转储JSON:

def json_serialize(ip, mac, nic):
    net_info = []
    for ipaddr, macaddr, nicname in zip(ip, mac, nic):
        net_info.append({
            'interface_name': nicaddr,
            'mac': macaddr,
            'ip': ipaddr
        })
    return json.dumps({'net_info': net_info})

您所需的输出格式似乎缺少外部{}括号以将其标记为正确的 JSON 对象。如果你真的必须产生那个输出(所以缺少那些括号),只需再次删除它们:

print json_serialize(ip, mac, nic)[1:-1]
于 2012-12-01T18:35:26.937 回答