Parse a Json(with array and objects) and export the data into Excel file in Node.js

后端 未结 2 1245
长情又很酷
长情又很酷 2021-02-08 15:30

I am new to Node.js. My requirement is, I need to parse a JSON and export the data into Excel file with all the fields in the JSON.

My JSON is as follows:



        
2条回答
  •  感情败类
    2021-02-08 15:56

    You can do it with AlaSQL javascript library with special SEARCH operator, which is designed to do search for nested objects. See the code below, which generates the Excel file with your structure (I did not include all fields):

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

    Some explanations:

    • SEARCH - is a special statement for query nested objects
    • / - loop over array elements
    • UNION ALL(...,...) - union of all nested found records
    • AS @variable - save current search position to temporary variable
    • introduction - go deep into the property "introduction"
    • RETURN(...,...) - create a record (JSON object) with properties
    • RETURN(value AS alias) - alias for the value
    • @a->id - get id property similar to a.id in JavaScript
    • [...] - terms with any special charaters
    • INTO XLSX("test411.xlsx",{headers:true}) - save results to Excel file with headers
    • FROM ? - get data from parameter
    • alasql(sql, [data]) - put data variable as first parameter of the query

    You also need to add other columns to finish this query. The sample file will be uploaded here in two hours.

    You also can remove this line from the source code: INTO XLSX(), and alasql() will return a JSON object with all properties:

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

    Here is the jsFiddle example

提交回复
热议问题