2012-12-01 55 views
3

在Fedora 17 64bit的同時使用netifaces和json導入。Python,字符串到JSON?

我想在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) 
+0

你所生產不是有效的JSON。對於初學者,你需要一個'{'..'}'。 –

回答

4

只需創建一個python dict用含有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] 
+0

謝謝,這是一個非常快速的反應,也是一個有效的! :)保重,我會盡快接受這個答案。 – Dayan