2013-02-21 88 views
1

以下兩個示例中的哪一個被認爲是針對JSON的更好格式 - 在約定,標準和/或節省內存方面(或出於任何其他原因)?爲JSON格式化Python字典

預先感謝您。

實施例1:

 
    { 
    "items": [ 
     { 
      "position": "Programmer", 
      "age": 29, 
      "fname": "Bob" 
     }, 
     { 
      "position": "Developer", 
      "age": 24, 
      "fname": "Joe" 
     }, 
     { 
      "position": "DBA", 
      "age": 31, 
      "fname": "Dave" 
     }, 
     { 
      "position": "Systems", 
      "age": 40, 
      "fname": "Cindy" 
     }, 
     { 
      "position": "Designer", 
      "age": 32, 
      "fname": "Erin" 
     }, 
     { 
      "position": "NWA", 
      "age": 45, 
      "fname": "Sam" 
     }, 
     { 
      "position": "Processor", 
      "age": 20, 
      "fname": "Lenny" 
     }, 
     { 
      "position": "Webmaster", 
      "age": 28, 
      "fname": "Ed" 
     } 
    ] 
    } 
實施例2:
 
    { 
    "position": [ 
     "Programmer", 
     "Developer", 
     "DBA", 
     "Systems", 
     "Designer", 
     "NWA", 
     "Processor", 
     "Webmaster" 
    ], 
    "age": [ 
     29, 
     24, 
     31, 
     40, 
     32, 
     45, 
     20, 
     28 
    ], 
    "fname": [ 
     "Bob", 
     "Joe", 
     "Dave", 
     "Cindy", 
     "Erin", 
     "Sam", 
     "Lenny", 
     "Ed" 
    ] 
    } 

回答

2

絕對1.

你可以迭代它在邏輯上任何語言:

for person in json['items']: # 'people'? 
    print person['name'] 

您將有2轉換成1,如果你想遍歷它:

data = [{key: json[key][i] for key in json} for i in range(len(json.keys()[0]))] 

此外,GZip壓縮有助於減少重複鍵的開銷(我刪除了空格):

File | Size (b) | Gzipped Size (b) 
---------------------------------- 
    1 | 191 |  176   
    2 | 386 |  196   
+0

感謝您的回答,並花時間比較文件大小(壓縮和未壓縮)。 – RLS 2013-02-21 20:33:03

3

首先是更清潔,在我的意見。它將每個人的屬性組合在一起,這很適合轉換成Person對象。當只有一個列表時,迭代和排序也更容易,而對於排序Python,則提供了attrgetter,用於簡單的排序鍵。從技術上講,由於詞典較少,第二種可能效率更高,但清晰度只能從中獲益。

+0

第一個也是更多的JSON-ic。基本單位是第一個「人」,基本單位是第二個屬性。此外,如果您想進行任何排序或轉換,則不可能在第二個示例中的所有屬性中強制執行該排序或轉換。 – Chris 2013-02-21 01:47:09

+0

爲術語+1:「JSON-ic」 – RLS 2013-02-21 02:05:45