<p>我假设您的JSON文件将解码成一个字典列表。首先,我们需要一个函数来压平JSON对象:</p>
<pre><code>def flattenjson( b, delim ):
val = {}
for i in b.keys():
if isinstance( b[i], dict ):
get = flattenjson( b[i], delim )
for j in get.keys():
val[ i + delim + j ] = get[j]
else:
val[i] = b[i]
return val
</code></pre>
<p>在JSON对象上运行此代码段的结果:</p>
<pre><code>flattenjson( {
"pk": 22,
"model": "auth.permission",
"fields": {
"codename": "add_message",
"name": "Can add message",
"content_type": 8
}
}, "__" )
</code></pre>
<p>是</p>
<pre><code>{
"pk": 22,
"model": "auth.permission',
"fields__codename": "add_message",
"fields__name": "Can add message",
"fields__content_type": 8
}
</code></pre>
<p>将此函数应用于JSON对象的输入数组中的每个dict之后:</p>
<pre><code>input = map( lambda x: flattenjson( x, "__" ), input )
</code></pre>
<p>找到相关的列名:</p>
<pre><code>columns = [ x for row in input for x in row.keys() ]
columns = list( set( columns ) )
</code></pre>
<p>通过csv模块运行这个并不难:</p>
<pre><code>with open( fname, 'wb' ) as out_file:
csv_w = csv.writer( out_file )
csv_w.writerow( columns )
for i_r in input:
csv_w.writerow( map( lambda x: i_r.get( x, "" ), columns ) )
</code></pre>
<p>我希望这有帮助!</p>