21

我有一个嵌套的 json 对象。为了简单起见:

data = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}

一个真实的对象更大,但关键是它是一个嵌套的对象。值可以是字符串、数字或其他对象。现在我需要得到一个 excel 表(对于这个特定的 json 看起来像这样):

|----------------------------------------
| key1 | key2 |           key3          |
|      |      |--------------------------
|      |      | nestedKey1 | nestedKey2 |
|----------------------------------------
|  1   |  2   |     3      |      4     |
|----------------------------------------

为了做到这一点,我尝试使用 xlsx 库。我按如下方式导入库:

import { WorkSheet, WorkBook, utils, writeFile } from 'xlsx';

在我的方法中,我定义了对象:

let myObj = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}

然后我创建一个工作表和工作簿:

const workSheet: WorkSheet = utils.json_to_sheet([myObj]);
const workBook: WorkBook = utils.book_new();
utils.book_append_sheet(workBook, workSheet, 'object_to_save');

最后将其写入文件:

writeFile(workBook, 'Tests.xlsx');

但完全可以预料,它不会像我希望的那样处理嵌套对象。我不知道我应该怎么做才能得到想要的结果。

4

2 回答 2

0

只需使用flat库,它将展平您的对象,然后将该展平对象传递给工作表。

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:31:47.697 回答
-2

它总是只会给你扁平化的结果。您可以尝试一些仅进行扁平化的在线转换器。 https://json-csv.com/

但是,如果您使用的是 kendo-grid,它会按照您的期望导出。

https://demos.telerik.com/kendo-ui/grid/excel-export

于 2019-06-21T14:32:29.637 回答