parsingJson(包含数组和对象)并将数据导出到Node.js中的Excel文件中

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

我的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],[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,标题,描述,keyTerms,可见,introduction.id,introduction.title,introduction.resources.id,introduction.resources.title,… objectives.id,objectives.title,目标.description,…..等。

我需要dynamic地parsing对象和数组,并在电子表格的每一列中生成字段。

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

 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 

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

您可以使用带有特殊的“ SEARCH运算符的AlaSQL JavaScript库执行此操作,该运算符旨在search嵌套的对象。 请参阅下面的代码,该代码将生成带有您的结构的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(…,…) – 所有嵌套的已findlogging的联合
  • AS @variable – 将当前search位置保存到临时variables
  • 介绍 – 深入财产“介绍”
  • RETURN(…,…) – 创build一个具有属性的logging(JSON对象)
  • RETURN(值别名) – 值的别名
  • @ a-> id – 在JavaScript中获得类似于a.id的id属性
  • – 与任何特殊字符的条款
  • INTO XLSX(“test411.xlsx”,{headers:true}) – 将结果保存到带有标题的Excel文件
  • 从? – 从参数中获取数据
  • alasql(sql,[data]) – 把数据variables作为查询的第一个参数

您还需要添加其他列来完成此查询。 示例文件将在两个小时内上传到这里 。

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

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

这是jsFiddle的例子

您正在使用json2xls模块,它接受对象或数组,但嵌套级对象结构。 我的意思是说,如果介绍和目标是标量属性,你的定义将会是好的。 即

 { "id": 1255, "title": "...)", "description": "...", "keyTerms": "...", "visible": true, "introduction": "string/int/float/bool/date", "objectives": "string/int/float/bool/date" } 

要么

 [ { "id": 1255, "title": "...)", "description": "...", "keyTerms": "...", "visible": true, "introduction": "string/int/float/bool/date", "objectives": "string/int/float/bool/date" }, { "id": 1256, "title": "...)", "description": "...", "keyTerms": "...", "visible": true, "introduction": "string/int/float/bool/date", "objectives": "string/int/float/bool/date" } ] 

但在你的案例中,引入是一个嵌套元素的对象,而目标是一个对象数组,它们都被解释为[object] [object]

我不知道你在你的excel文件中想要什么,但是你需要决定如何首先压扁这个结构。