用Python将分层JSON数据写入Excel xls文件?

3
我希望能够将Python中的数据写入xlsx。目前,我已将其存储为JSON,但无论从Python中输出的是什么都没有关系。以下是单个文章的JSON示例:
{ 
   'Word Count': 50
   'Key Words': { 
                  ['Blah blah blah', 'Foo', ... ] }
   'Frequency': {
                  [9, 12, ... ] }
   'Proper Nouns': { 
                  ['UN', 'USA', ... ] }
   'Location': 'Mordor'
}

我检查了XlsxWriter模块,但无法弄清如何翻译大小不一的分层数据(请注意两个数据“对象”之间专有名词的数量)。
我希望数据看起来像这样:

Excel screenshot

任何指针?

你能否编辑问题并包含你所拥有的JSON样本? - Martin Evans
当然,我刚刚在手机上写了一些内容以展示格式。 - ahagouel
1个回答

5

由于您的结构可以任意嵌套,我建议使用递归来实现:

from collections import OrderedDict
import xlsxwriter
import json

def json_to_excel(ws, data, row=0, col=0):
    if isinstance(data, list):
        row -= 1
        for value in data:
            row = json_to_excel(ws, value, row+1, col)
    elif isinstance(data, dict):
        max_row = row
        start_row = row
        for key, value in data.iteritems():
            row = start_row
            ws.write(row, col, key)
            row = json_to_excel(ws, value, row+1, col)
            max_row = max(max_row, row)
            col += 1
        row = max_row
    else:
        ws.write(row, col, data)

    return row

text = """
[
    {
        "Source ID": 123,
        "WordCount": 50,
        "Key Words": ["Blah blah blah", "Foo"],
        "Frequency": [9, 12, 1, 2, 3],
        "Proper Nouns": ["UN", "USA"],
        "Location": "Mordor"
    },
    {
        "Source ID": 124,
        "WordCount": 50,
        "Key Words": ["Blah blah blah", "Foo"],
        "Frequency": [9, 12, 1, 2, 3],
        "Proper Nouns": ["UN", "USA"],
        "Location": "Mordor"
    }
]
"""

data = json.loads(text, object_pairs_hook=OrderedDict)
wb = xlsxwriter.Workbook("output.xlsx")
ws = wb.add_worksheet()
json_to_excel(ws, data)
wb.close()  

这将会给你一个类似于下面这样的输出文件:

Excel截图


谢谢!在定义数据时,object_pairs_hook=OrderedDict 这行代码的必要性是什么?我的所有数据已经在 JSON 中而不是文本中了,我是否需要这个? - ahagouel
这是一个技巧,可以确保返回的字典与JSON数据保持相同的顺序。 - Martin Evans
太酷了!每天都能学到新东西。我会测试一下并告诉你结果。 - ahagouel
是的!赢家赢家。谢谢帮忙! - ahagouel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接