0

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

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

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

]

有 2-4 个嵌套级别。

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

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

有没有现成的工具可以将 JSON 导入 Excel?

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

4

3 回答 3

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 上的几张表来存储具有三个维度的矩阵,但人类可读性可能会随之下降。它归结为您正在使用的数据,没有通用的解决方案

于 2013-01-04T19:12:21.240 回答
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');                
于 2013-01-04T17:21:18.100 回答
1

只需使用平面库来展平您的对象。

var flatten = require('flat')
 
flatten({
    key1: {
        keyA: 'valueI'
    },
    key2: {
        keyB: 'valueII'
    },
    key3: { a: { b: { c: 2 } } }
})

输出

{
  'key1.keyA': 'valueI',
  'key2.keyB': 'valueII',
  'key3.a.b.c': 2
}
于 2021-12-26T02:28:16.917 回答