3

Fedora 17では、netifacesとjsonインポートを使用しているときに64ビット。

この形式をJSONで取得しようとしています

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

私は現在、を使用していて、stringそれに追加するだけです。これを取得します。

"'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代わりにcontainedを使用してPythonを作成し、それを一度にJSONにlistダンプします。

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 に答える