2013-02-21 45 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