猿问

如何将JSON转换为CSV?

如何将JSON转换为CSV?

我有一个JSON文件,我想要隐藏到一个CSV文件。我怎样才能用Python做到这一点呢?

我试过:

import jsonimport csv

f = open('data.json')data = json.load(f)f.close()f = open('data.csv')csv_file = csv.writer(f)for item in data:
    f.writerow(item)f.close()

但是,这是行不通的。我正在使用Django,收到的错误是:

file' object has no attribute 'writerow'

于是,我尝试了以下几点:

import jsonimport csv

f = open('data.json')data = json.load(f)f.close()f = open('data.csv')csv_file = csv.writer(f)for item in data:
    csv_file.writerow(item)f.close()

然后我得到错误:

sequence expected

示例JSON文件:

[
  {
    "pk": 22,
    "model": "auth.permission",
    "fields": {
      "codename": "add_logentry",
      "name": "Can add log entry",
      "content_type": 8
    }
  },
  {
    "pk": 23,
    "model": "auth.permission",
    "fields": {
      "codename": "change_logentry",
      "name": "Can change log entry",
      "content_type": 8
    }
  },
  {
    "pk": 24,
    "model": "auth.permission",
    "fields": {
      "codename": "delete_logentry",
      "name": "Can delete log entry",
      "content_type": 8
    }
  },
  {
    "pk": 4,
    "model": "auth.permission",
    "fields": {
      "codename": "add_group",
      "name": "Can add group",
      "content_type": 2
    }
  },
  {
    "pk": 10,
    "model": "auth.permission",
    "fields": {
      "codename": "add_message",
      "name": "Can add message",
      "content_type": 4
    }
  }]


四季花海
浏览 1450回答 3
3回答

肥皂起泡泡

我假设您的JSON文件将解码为字典列表。首先,我们需要一个将JSON对象扁平化的函数: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在JSON对象上运行此片段的结果:flattenjson( {     "pk": 22,      "model": "auth.permission",      "fields": {       "codename": "add_message",        "name": "Can add message",        "content_type": 8     }   }, "__" )是{     "pk": 22,      "model": "auth.permission',      "fields__codename": "add_message",      "fields__name": "Can add message",      "fields__content_type": 8 }将此函数应用于JSON对象的输入数组中的每个dict之后:input = map( lambda x: flattenjson( x, "__" ), input )并找到相关的列名:columns = [ x for row in input for x in row.keys() ]columns = list( set( columns ) )在CSV模块中运行这一点并不难: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 ) )我希望这能帮到你!
随时随地看视频慕课网APP

相关分类

Python
我要回答