将嵌套的JSON内容转储转换为XLS

时间:2013-01-04 17:16:59

标签: python json excel

我有来自内容管理网站的JSON转储,其格式如下:

[
    {
        id: "obj1",
        children: [...]
    },

    {
        id: "obj2",
        children: [...]
    }

]

有2-4个嵌套级别。

将此转换为Microsoft Excel XLS的最佳方法是什么,以便以某种方式处理嵌套级别,以便Excel能够使用他们的数据?

使用此特定数据,一种方法是为每个顶级文件夹(嵌套级别)创建一个新工作表。所有工作表都包含从该特定文件夹中的JSON对象中选取的相同列名。

是否有用于将JSON导入Excel的现成工具?

最好是作为命令行工具,如果需要编写脚本,那么在Python中。

2 个答案:

答案 0 :(得分:2)

这取决于您的数据。

如果嵌套发生时没有任何重复,那么最简单的选择是复制所有内容或留下空格,如果您的数据足够完整,可以在您找到空白的地方进行重复。

这意味着作为CSV的XLS将如下所示:

Element1 Element1.1 Element1.1.1 ...
Element1 Element1.1 Element1.1.2 ...
Element2 Element2.1 Element2.1.1 ...

每个元素都是左边元素的子元素。您可以看到父母重复的次数与孩子的次数乘以每个孩子出现的次数。

您还可以使用两列来创建一个非常简单的表:

**Parent**    **Child**
Element1      Element1.1
Element1.1    Element1.1.1  
Element1.1    Element1.1.2
Element2      Element2.1
Element2.1    Element2.1.1
...

元素取决于您的粒度。您可以将key = values对分组为一个字符串,您可以将多个字段组合成一个字段并使用正则表达式将其解析回来,或者您可以将所有内容分开并将该键视为元素,将值视为另一个。

最后,如果有一些规律性,那么你可以采取一种更有趣的方法,假设你有一些重复的字段名,在这种情况下你可以采用任何以前的方法,但使用字段名来生成矩阵而不是列表。第一个例子是微不足道的,因为它显然是一个元组列表,它已经有一个隐式序数头,第二个是一个表,可能看起来像一个矩阵,但你可以这样做。

**Parent**    **Child (default)** **Repeating key1** **Repeating key2**
e1            e1.1
e1.1          e1.1.1
e.1.1.1                           something          
e.1.1         e.1.1.2
e.1.1.2                                               somethingelse

所以基本上最后你有一个稀疏矩阵。

有一些非常有趣的方法可以在XLS上使用多张纸来存储具有三维的矩阵,但人类可读性可能随之下降。它归结为您正在使用的数据,没有通用解决方案

答案 1 :(得分:1)

我认为 PHP - 电子表格引擎是您需要的......

以下是您查询的一些链接:

希望这会对你有帮助.. :)

我猜你要这个......

            $excel = new SimpleExcel('csv');                    // instantiate new object (will automatically construct the parser & writer type as CSV)

           $excel->writer->setData(
               $array // this is array generated from json
            );                                                  // add some data to the writer
            $excel->writer->setDelimiter(";");                  // (optional) if delimiter not set, by default comma (",") will be used instead
            $excel->writer->saveFile('example');