json转换csv的python实现

来源:互联网 发布:网站编辑seo是什么 编辑:程序博客网 时间:2024/06/01 10:27

一、需求

        1.需求

                 想要从JAON文件转换成csv文件,进行数据处理。注意此json文件为多个json的合集。

        2.测试json文件数据

                 {"t": "2017-12-20T10:53:51.582000+08:00", "a": 0, "b": 0, "c": 7, "d": 42, "e": 1, "g": 23, "h": 1}
                 {"t": "2017-12-20T10:53:51.582000+08:00", "a": 0, "b": 0, "c": 7, "d": 42, "e": 1}
                 {"t": "2017-12-20T10:53:51.582000+08:00", "a": 0, "b": 0, "c": 7, "d": 42, "e": 1}
                 {"t": "2017-12-20T10:53:51.582000+08:00", "a": 0, "b": 0, "c": 7, "d": 42, "e": 1, "g": 23, "h": 1}


二、代码一

import csvimport jsonimport sysimport collections # 有序字典def trans(path):    jsonData=open(path+'.json')    #csvfile = open(path+'.csv', 'w')#此处这样写会导致写出来的文件会有空行    csvfile = open(path+'.csv', 'wb')#python2下#     csvfile = open(path+'.csv', 'w',newline='')#python3下    for line in jsonData:#获取属性列表        dic=json.loads(line[0:])        keys=dic.keys()        break    writer = csv.writer(csvfile)    writer.writerow(keys)#将属性列表写入csv中    for dic in jsonData:#读取json数据的每一行,将values数据一次一行的写入csv中        dic=json.loads(dic[0:])        writer.writerow(dic.values())    jsonData.close()    csvfile.close()trans("./dic_test")


            1.结果:

a c b e dgh t
0 7 0142 2017-12-20T10:53:51.582000+08:00
0 7 0142 2017-12-20T10:53:51.582000+08:00
0 7 0142 23 1 2017-12-20T10:53:51.582000+08:00

            数据错位了?什么情况?问题出现在哪里?

            2.分析:

                       多个json由于每个json的key值不统一(有多有少),json是无序的,导致插入时候的value值无序,所以导致最后写入csv的值错乱。


三、代码二

import csvimport jsonimport sysimport collections # 有序字典def trans(path):    jsonData=open(path+'.json')    #csvfile = open(path+'.csv', 'w')#此处这样写会导致写出来的文件会有空行    csvfile = open(path+'.csv', 'wb')#python2下    data = {}    keys_write = True    writer = csv.writer(csvfile)        for line in jsonData:#获取属性列表        dic=json.loads(line[0:-1])        keys=dic.keys()        break                for dic in jsonData:#读取json数据的每一行,将values数据一次一行的写入csv中        print(dic)        dic=json.loads(dic[0:])                for key in keys:            if dic.has_key(key):                data[key] = dic[key]            else:                data[key] = ""        print(data)        if keys_write == True:            writer.writerow(data.keys())        writer.writerow(data.values())        keys_write = False            jsonData.close()    csvfile.close()trans("./dic_test")


            结果:

a c b e dgh t
0 7 0142 2017-12-20T10:53:51.582000+08:00
0 7 0142 2017-12-20T10:53:51.582000+08:00
0 7 0142 23 1 2017-12-20T10:53:51.582000+08:00


参考:

http://blog.csdn.net/qq_23926575/article/details/72788485

原创粉丝点击