尝试使用Python解析JSON文件以加载到数据库中

时间:2013-12-12 01:55:45

标签: python json pandas

以下是我必须展平并转换为能够加载到数据库中的格式的示例文件。我的方法是将dict压平并转换为CSV,我在使用所有信息创建最终数据帧的最后一步时遇到了一些困难。

    {
    "zipcode":"00544",
    "current":{"canwc":null,"cig":7000,"class":"observation"},
    "triggers":[178,30,176,103,179,112,21,20,48,7,50,40,57]
    }
    {
    "zipcode":"00601",
    "current":{"canwc":null,"cig":null,"class":"observation"},
    "triggers":[12,23,34,28,100]
    }
    {
    "zipcode":"00602",
    "current":{"canwc":null,"cig":null,"class":"observation"},
    "triggers":[13,85,43,101,38,31]
    }

下面的代码感谢来自@Martijn Pieters的帮助,最终会让我对所有数据帧进行迭代打印输出,但是我如何制作它以便我可以捕获一个巨大的数据帧,其中所有的部分基本连接在一起?然后我可以将最终的数据帧导出到csv等。(还有一种更好的方法可以将这个结果上传到数据库而不是先创建一个巨大的数据帧吗?)

    def lines_per_n(f, n):
        for line in f:
            yield ''.join(chain([line], itertools.islice(f, n - 1)))

    def flatten(jfile):
        for k, v in jfile.items():
            if isinstance(v, list):
                jfile[k] = ','.join(v)
            elif isinstance(v, dict):
                for kk, vv in v.items():
                    jfile['%s' % (kk)] = vv
                del jfile[k]
                return jfile

    with open('deadzips.json') as f:
        for chunk in lines_per_n(f, 7):
            try:
                jfile = json.loads(chunk)
                pd.DataFrame(flatten(jfile).items())
            except ValueError, e:
                pass
            else:
                pass

1 个答案:

答案 0 :(得分:0)

您可以使用csv模块的DictWriter类。

这个问题有一个例子:How to write header row with csv.DictWriter?