【问题标题】:Convert a stream of JSONs to CSV将 JSON 流转换为 CSV
【发布时间】:2017-03-21 03:27:04
【问题描述】:

我想将粘贴在文件中的 JSON 流(近 10,000 个)转换为具有特定标题和值格式的 CSV 文件。

我有以下 JSON 数据流:

{"shortUrlClicks":"594","longUrlClicks":"594","countries":[{"count":"125","id":"IQ"},{"count":"94","id":"US"},{"count":"56","id":"TR"},{"count":"50","id":"SA"},{"count":"29","id":"DE"},{"count":"24","id":"TN"},{"count":"20","id":"DZ"},{"count":"14","id":"EG"},{"count":"13","id":"MA"},{"count":"12","id":"PS"}],"browsers":[{"count":"350","id":"Chrome"},{"count":"100","id":"Firefox"},{"count":"46","id":"Safari"},{"count":"35","id":"Mobile"},{"count":"20","id":"Mobile Safari"},{"count":"20","id":"SamsungBrowser"},{"count":"8","id":"MSIE"},{"count":"6","id":"Opera"},{"count":"3","id":"OS;FBSV"},{"count":"2","id":"Maxthon"}],"platforms":[{"count":"227","id":"Android"},{"count":"221","id":"Windows"},{"count":"67","id":"iPhone"},{"count":"30","id":"X11"},{"count":"25","id":"Macintosh"},{"count":"8","id":"iPad"},{"count":"2","id":"Android 4.2.2"},{"count":"1","id":"Android 4.1.2"},{"count":"1","id":"Android 4.3"},{"count":"1","id":"Android 5.0.1"}],"referrers":[{"count":"340","id":"unknown"},{"count":"193","id":"t.co"},{"count":"38","id":"m.facebook.com"},{"count":"12","id":"addpost.it"},{"count":"4","id":"plus.google.com"},{"count":"3","id":"www.facebook.com"},{"count":"1","id":"goo.gl"},{"count":"1","id":"l.facebook.com"},{"count":"1","id":"lm.facebook.com"},{"count":"1","id":"plus.url.google.com"}]}
{"shortUrlClicks":"594","longUrlClicks":"594","countries":[{"count":"125","id":"IQ"},{"count":"94","id":"US"},{"count":"56","id":"TR"},{"count":"50","id":"SA"},{"count":"29","id":"DE"},{"count":"24","id":"TN"},{"count":"20","id":"DZ"},{"count":"14","id":"EG"},{"count":"13","id":"MA"},{"count":"12","id":"PS"}],"browsers":[{"count":"350","id":"Chrome"},{"count":"100","id":"Firefox"},{"count":"46","id":"Safari"},{"count":"35","id":"Mobile"},{"count":"20","id":"Mobile Safari"},{"count":"20","id":"SamsungBrowser"},{"count":"8","id":"MSIE"},{"count":"6","id":"Opera"},{"count":"3","id":"OS;FBSV"},{"count":"2","id":"Maxthon"}],"platforms":[{"count":"227","id":"Android"},{"count":"221","id":"Windows"},{"count":"67","id":"iPhone"},{"count":"30","id":"X11"},{"count":"25","id":"Macintosh"},{"count":"8","id":"iPad"},{"count":"2","id":"Android 4.2.2"},{"count":"1","id":"Android 4.1.2"},{"count":"1","id":"Android 4.3"},{"count":"1","id":"Android 5.0.1"}],"referrers":[{"count":"340","id":"unknown"},{"count":"193","id":"t.co"},{"count":"38","id":"m.facebook.com"},{"count":"12","id":"addpost.it"},{"count":"4","id":"plus.google.com"},{"count":"3","id":"www.facebook.com"},{"count":"1","id":"goo.gl"},{"count":"1","id":"l.facebook.com"},{"count":"1","id":"lm.facebook.com"},{"count":"1","id":"plus.url.google.com"}]}

...等等。

我想将其转换为 CSV 格式的表单,无论标题(shortUrlclicks、longUrclicks 等)是什么:

如果您能同样帮助我,我将不胜感激。 python 或任何其他语言中的任何代码都会很有用。

【问题讨论】:

    标签: python json csv file-conversion


    【解决方案1】:

    您可以使用 Python 标准库中的 JSON 库来读取 JSON 并使用 OS 库(也来自 Python 标准库)读取/写入文件。

    应该是这样的:

    f = File.open('file.json', 'r')
    items = json.loads(f.read())
    csv_file = ""
    
    for row in items():
        new_row = ""
        # get columns somehow
        for column in columns:
            new_row = "%s," % column 
    
        # Finished row, append a '\n' char to the row string.
        csv_file.append("%s\n" % new_row)
    
    # write json file
    out = File.open('out.csv', 'rw')
    out.write(csv_file)
    out.close()
    

    PS:我在发布之前没有运行此代码。这是你想知道的事情。

    【讨论】:

    • OP 要求从“流式”JSON 而非文件 JSON 中创建 CSV 文件。
    【解决方案2】:

    您可以使用 Pandas 为您执行此操作。

    像这样读取您的 JSON 文件

    df = pandas.read_json('filename.json')

    写入 csv

    df.to_csv('filename.csv', index=False) # 如果不需要,则设置索引为 false

    示例: http://hayd.github.io/2013/pandas-json

    参考: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html

    【讨论】:

    • OP 要求从“流式”JSON 而非文件 JSON 中创建 CSV 文件。
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 2019-08-21
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多