2015-12-30 9 views
9

Jestem nowy w witrynie Node.js. Moim wymaganiem jest, że muszę przeanalizować JSON i wyeksportować dane do pliku Excel z wszystkimi polami w JSON.Przetwórz Json (z tablicą i obiektami) i wyeksportuj dane do pliku Excel w pliku Node.js

Moje JSON jest następujący:

{ 
    "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 
      } 
     } 
     ] 
    } 
    ] 
} 

użyłem json2xls moduł i mam arkusz z pola id, tytuł, opis, keyterms, widzialne Wprowadzenie, cele, gdzie przyszedł wprowadzenie i cele jak [object] [object], [obiekt] [object]

Oto kod do eksportu do pliku 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'); 

}); 

Ale chcę, aby pola wyjściowe, takie jak id, tytuł, opis, kluczowe warunki, widoczne, introduction.id, introduction.title, introduction.resources.id, introduction.resources.title, ..., cele.id, cele. tytuł, opis celów, ..... itp.

Muszę parsować obiekt i tablicę dynamicznie i wygenerować pola w każdej kolumnie arkusza kalkulacyjnego.

Wyjście próbki z kolumnami i danych są następujące:

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 

Proszę mi pomóc jak to zrobić.

+0

Proszę również podać kod, który jesteś za pomocą, aby utworzyć plik Excel. http://stackoverflow.com/help/how-to-ask – MojoJojo

+0

@MojoJojo Tak, dodałem kod, który użyłem do eksportu danych JSON. – Arunraj

+0

Podaj przykład danych, które chcesz osiągnąć. –

Odpowiedz

0

Używasz modułu json2xls, który akceptuje obiekt lub tablicę, ale zagnieżdżoną strukturę obiektu poziomu. Chodzi mi o to, że twoja definicja byłaby w porządku, gdyby wprowadzenie i cele były własnościami skalarnymi. To znaczy.

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

lub

[ 
{ 
    "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" 
} 
] 

ale w wprowadzania przypadku Przedmiotem elementy zagnieżdżone, a celem jest szereg obiektów, które zarówno są interpretowane jako [Obiekt] [przedmiot]

Nie wiem, czego chcesz w pliku excel, ale musisz najpierw zdecydować, jak spłaszczyć strukturę.

5

Można to zrobić za pomocą AlaSQL biblioteki javascript ze specjalnym SEARCH operator, który jest przeznaczony do wyszukiwania zagnieżdżonych obiektów. Zobacz poniższy kod, który generuje plik Excel z konstrukcji (nie obejmują wszystkich pól):

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]); 

Niektóre wyjaśnienia:

  • SEARCH - jest specjalnym oświadczeniu dla zapytań zagnieżdżonych obiektów
  • /- pętla nad elementów tablicy
  • UNION ALL (..., ...) - zjednoczenie wszystkich zagnieżdżonych znalezionych rekordów
  • AS @zmienna - zapisz aktualną pozycję wyszukiwarki tymczasowa zmienna
  • wprowadzenie - przejdź do nieruchomości "wprowadzenie"
  • POWRÓT (..., ...) - utworzyć rekord (obiekt JSON) o właściwościach
  • zwrotu (wartość jako alias) - alias dla wartości
  • @ a-> id - get właściwości id podobną do a.id w JavaScript
  • [.. .] - warunki z dowolnymi specjalnymi znakami towarowymi
  • INTO XLSX ("test411.xlsx", {headers: true}) - zapisuje wyniki w pliku Excel z nagłówkami
  • Z? - pobranie danych z parametrem
  • alasql (SQL, [data]) - umieścić zmienne dane jako pierwszy parametr zapytania

Trzeba także dodać inne kolumny, aby zakończyć tę kwerendę. Przykładowy plik zostanie przesłany here w dwie godziny.

Można również usunąć ten wiersz z kodu źródłowego: INTO XLSX() i alasql() zwróci obiekt JSON ze wszystkimi właściwościami:

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

Oto jsFiddle example

Powiązane problemy