javascript - 解析一个 Json(带有数组和对象)并将数据导出到 Node.js 中的 Excel 文件中

标签 javascript json node.js excel

我是 Node.js 的新手。我的要求是,我需要解析一个 JSON 并将数据导出到 Excel 文件中,其中包含 JSON 中的所有字段。

我的 JSON 如下:

{
  "id": 1255,
  "title": "The Brain and Nervous System (LS1.D)",
  "description": "By the time you finish this playlist, you should be able to: 1. Describe how the nervous system is organized and how it works 2. Describe the role of the nervous sytem, and explain how our different senses work to send information to your brain",
  "keyTerms": "You should also be able to define the following words: stimulus, response, neuron, sensory neuron, motor neuron, nerve impulse, dendrite, axon, nerve, central nervous system, peripheral nervous system, brain, spinal cord, cerebrum, cerebellum, brain stem, retina, cochlea",
  "visible": true,
  "introduction": {
    "id": 5336,
    "title": "Introductory Materials",
    "resources": [
      {
        "id": 23022,
        "title": "Vocabulary - Brain and Nervous System",
        "description": "",
        "purpose": "",
        "category": "Website",
        "position": 1,
        "contentItem": {
          "id": 1650,
          "url": "http://quizlet.com/45497180/flashcards",
          "itemType": "Website",
          "embedUrl": null
        }
      },
      {
        "id": 23023,
        "title": "The Brain and Nervous System Study Guide",
        "description": "Fill out this study guide while studying! It will help you prepare for the assessment!",
        "purpose": "",
        "category": "Website",
        "position": 2,
        "contentItem": {
          "id": 12581,
          "url": "https://docs.google.com/a/summitps.org/document/d/1TjF1MY3cyGNKT4s46uk1iz5NvjrY59eNPH8YKYYTC_E/edit",
          "itemType": "Website",
          "embedUrl": null
        }
      }
    ]
  },
  "objectives": [
    {
      "id": 10732,
      "title": "1. Describe how the nervous system is organized",
      "caContribution": 5,
      "position": 1,
      "resources": [
        {
          "id": 23024,
          "title": "Reading - How the Nervous System Works",
          "description": "",
          "purpose": "",
          "category": "Document",
          "position": 1,
          "contentItem": {
            "id": 1651,
            "url": null,
            "itemType": "Document",
            "embedUrl": "https://view-api.box.com/1/sessions/493fca96d46a4559813c3118ebeef8b6/view?theme=light",
            "s3Url": "/files/content_items/relateds/000/001/651/original/53d1ddd8f07787731aa7d84f-how_20nervous_20system_20works_001.pdf?1424368501"
          }
        }
      ]
    },
    {
      "id": 10734,
      "title": "2. Describe the role of the nervous sytem, and explain how our different senses work to send information to your brain",
      "caContribution": 5,
      "position": 2,
      "resources": [
        {
          "id": 23039,
          "title": "Study Jams - The Senses",
          "description": "This series of videos explains the different senses: sight, hearing, taste, touch, and smell",
          "purpose": "",
          "category": "Website",
          "position": 1,
          "contentItem": {
            "id": 1666,
            "url": "http://studyjams.scholastic.com/studyjams/jams/science/human-body/touching.htm",
            "itemType": "Website",
            "embedUrl": null
          }
        },
        {
          "id": 23040,
          "title": "Nervous System: I'm Sensing Something",
          "description": "Format: Article Content: How does the nervous system work and interact with other systems",
          "purpose": "",
          "category": "Website",
          "position": 1,
          "contentItem": {
            "id": 12582,
            "url": "http://www.biology4kids.com/files/systems_nervous.html",
            "itemType": "Website",
            "embedUrl": null
          }
        }
      ]
    }
  ]
}

我使用了 json2xls 模块,我得到了包含字段 id、标题、描述、keyTerms、可见、介绍、目标的电子表格,其中介绍和目标类似于 [object][object ],[对象][对象]

这是导出到excel文件的代码:

var fs = require("fs");
var json2xls = require("json2xls");

fs.readFile('/home/e100093/nodejs/sampleJson.json','utf8',function(err,body){

var jsonData = JSON.parse(body);

var xls = json2xls(jsonData);
fs.writeFileSync('final-test.xlsx', xls, 'binary');

});

但我想要输出字段,如 id、title、description、keyTerms、visible、introduction.id、introduction.title、introduction.resources.id、introduction.resources.title、...、objectives.id、objectives。标题、目标、描述、.....等

我需要动态解析对象和数组,并在电子表格的每一列中生成字段。

带有列和数据的示例输出如下:

id  title  description  keyTerms  visible  introduction.id  introduction.title  introduction.resources.id  introduction.resources.title  introduction.resources.description  introduction.resources.purpose  introduction.resources.category  introduction.resources.position  introduction.resources.contentItem.id  introduction.resources.contentItem.url  introduction.resources.contentItem.itemType  introduction.resources.contentItem.embedUrl  objectives.id  objectives.title  objectives.caContribution  objectives.position  objectives.resources.id  objectives.resources.title  objectives.resources.description  objectives.resources.purpose  objectives.resources.category  objectives.resources.position  objectives.resources.contentItem.id  objectives.resources.contentItem.url  objectives.resources.contentItem.itemType  objectives.resources.contentItem.embedUrl  objectives.resources.contentItem.s3Url

1255  The Brain and Nervous System (LS1.D)  By the time you finish...  You should also...  true  5336  Introductory Materials  23022  Vocabulary - Brain and Nervous System  null  null  Website  1  1650  http://quizlet.com/...  Website  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null
1255  The Brain and Nervous System (LS1.D)  By the time you finish...  You should also...  true  5336  Introductory Materials  23023  The Brain and Nervous System Study Guide  Fill out this...  null  Website  2  12581  https://docs.google.com/...  Website  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null  null
1255  The Brain and Nervous System (LS1.D)  By the time you finish...  You should also...  true  null  null  null  null  null  null  null  null  null  null  null  null  10732  1. Describe how...  5  1  23024  Reading - How...  null  null  Document  1  1651  null  Document  https://view-api.box.com/1...  /files/content...  
1255  The Brain and Nervous System (LS1.D)  By the time you finish...  You should also...  true  null  null  null  null  null  null  null  null  null  null  null  null  10734  2. Describe the role...  5  2  23039  Study Jams - The Senses  This series of videos  null  Website  1  1666  http://studyjams.scholastic.com...  Website  null
1255  The Brain and Nervous System (LS1.D)  By the time you finish...  You should also...  true  null  null  null  null  null  null  null  null  null  null  null  null  10734  2. Describe the role...  5  2  23040  Nervous System: I'm Sensing... Format: Article Content...  null  Website  1  12582  http://www.biology4kids.com...  Website  null

请帮助我如何做到这一点。

最佳答案

您可以使用 AlaSQL带有特殊 SEARCH 运算符的 javascript 库,旨在搜索嵌套对象。请参阅下面的代码,它会生成具有您的结构的 Excel 文件(我没有包括所有字段):

var alasql = require('alasql');

var data = [{
   "id": 1255,
   "title": "The Brain and Nervous System (LS1.D)",
   // ...
},
{
   "id": 1256,
    // ...
}];

// Here is search query
alasql('SEARCH / AS @a \
    UNION ALL( \
      introduction AS @b \
      resources / AS @c \
      RETURN(@a->id AS id, @a->title AS title, @a->description AS description, \
        @a->keyTerms AS keyTerms, @a->visible AS visible, \
        @b->id as [introduction.id], @b->title as [introduction.title], \
        @c->id AS [introduction.resources.id], \
        @c->contentItem->id AS [introduction.resources.contentItem.id] \
      ) \
    , \
      objectives AS @b \
      resources / AS @c \
      RETURN(@a->id AS id, @a->title AS title, @a->description AS description, \
        @a->keyTerms AS keyTerms, @a->visible AS visible, \
        @b->id as [objectives.id], @b->title as [objectives.title], \
        @c->id AS [objectives.resources.id], \
        @c->contentItem->id AS [objectives.resources.contentItem.id] \
      ) \
    ) INTO XLSX("test411.xlsx",{headers:true})\
    FROM ?',[data]);

一些解释:

  • SEARCH - 是查询嵌套对象的特殊语句
  • /- 遍历数组元素
  • UNION ALL(...,...) - 所有嵌套记录的并集
  • AS @variable - 将当前搜索位置保存到临时变量
  • 介绍 - 深入了解属性“介绍”
  • RETURN(...,...) - 创建带有属性的记录(JSON 对象)
  • RETURN(value AS alias) - 值的别名
  • @a->id - 获取类似于 JavaScript 中的 a.id 的 id 属性
  • [...] - 带有任何特殊字符的术语
  • INTO XLSX("test411.xlsx",{headers:true}) - 将结果保存到带有标题的 Excel 文件
  • 来自 ? - 从参数中获取数据
  • alasql(sql, [data]) - 将数据变量作为查询的第一个参数

您还需要添加其他列来完成此查询。示例文件将上传here两小时后。

您也可以从源代码中删除这一行:INTO XLSX()alasql() 将返回一个包含所有属性的 JSON 对象:

var res = alasql('SEARCH / AS @a UNION ALL(...) FROM ?',[data]);
console.log(res);

这里是 jsFiddle example

关于javascript - 解析一个 Json(带有数组和对象)并将数据导出到 Node.js 中的 Excel 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34527959/

相关文章:

JavaScript 执行时间非常慢 - Chrome

javascript - Coinmarketcap API 不工作

html - 我想使用 joi 验证时间字段

javascript - 使用aspect.around,但检查相互调用的方法

javascript - 试图将 div 放在 iframe 旁边

json - 无法让 Json 在 ag Grid 中显示只是说正在加载

javascript - 使用自定义函数扩展 should.js

javascript - 来自外部 js 文件的 XHR 导致应用程序崩溃

javascript - 有什么方法可以覆盖我网站的 'CSS Theme' 吗?

javascript - jQuery + JSON - 在附加之前清除数据