2.0.3 • Published 4 years ago

json-conversion-tool v2.0.3

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

JSON-CONVERSION-TOOL

NPM

json-conversion-tool npm

npm.io libraries io snyk npm.io npm.io

Github

npm.io npm.io npm.io npm.io

Description

Provides functions for converting JSON objects to and from CSVs.

Try me out

Open in Gitpod

Usage

Example

const deeperPersonJson = [
    {
        id: 1,
        personalInfo: {
            firstName: 'John',
            lastName: 'Smith',
            title: 'Mr'
        },
        jobInfo: {
            department: 'HR',
            title: 'HR Assistant',
        },
        Awards: [
            {
                year: 2016,
                title: 'Best at Everything'
            }
        ]
    },
    {
        id: 2,
        personalInfo: {
            firstName: 'Jane',
            lastName: 'Doe',
            title: 'Mrs'
        },
        jobInfo: {
            department: 'Sales',
            title: 'Sales Executive',
        }
    },
    {
        id: 3,
        personalInfo: {
            firstName: 'John',
            lastName: 'Doe',
            title: 'Mr'
        },
        jobInfo: {
            department: 'R&D',
            title: 'Data Scientist',
        },
        warnings: [
            {
                year: 2016,
                reason: 'Farted in the coffee machine'
            }
        ]
    },
];

const relationalJson: RelationalJson = new Converter().convertJson(DeeperPersonJson, {});
const outputGenerator = new OutputGenerator(relationalJson);
const csv = outputGenerator.generateCsv();
const markdown = outputGenerator.generateMarkdown();
const html = outputGenerator.generateOutput({
  columnSeperator: '',
  tableLevelCallback: (output: string, table: RelationalJson) =>
    output + `<h1>${table.title}</h1>` + '<table><tr>' + table.columnNames.map(x => `<th>${x}</th>`).join('') + '</tr>',
  rowLevelCallback: (rowCol: IRowValue) => `<td>${rowCol.value}</td>`,
  rowStartOutput: '<tr>',
  rowEndOutput: '</tr>',
  tableEndOutput: '</table>',
  tableSpacing: '<br>',
});

CSV Output

id,personalInfo.firstName,personalInfo.lastName,personalInfo.title,jobInfo.department,jobInfo.title,Awards,warnings
1,John,Smith,Mr,HR,HR Assistant,1,
2,Jane,Doe,Mrs,Sales,Sales Executive,,
3,John,Doe,Mr,R&D,Data Scientist,,1

Awards
year,title
2016,Best at Everything

warnings
year,reason
2016,Farted in the coffee machine

Markdown Output


Converted JSON

idpersonalInfo.firstNamepersonalInfo.lastNamepersonalInfo.titlejobInfo.departmentjobInfo.titleAwardswarnings
1JohnSmithMrHRHR Assistant1
2JaneDoeMrsSalesSales Executive
3JohnDoeMrR&DData Scientist1

Awards

yeartitle
2016Best at Everything

warnings

yearreason
2016Farted in the coffee machine

HTML (custom) Output

<h1>Converted JSON</h1>
<table>
    <tr>
        <th>id</th>
        <th>personalInfo.firstName</th>
        <th>personalInfo.lastName</th>
        <th>personalInfo.title</th>
        <th>jobInfo.department</th>
        <th>jobInfo.title</th>
        <th>Awards</th>
        <th>warnings</th>
    </tr>
    <tr>
        <td>1</td>
        <td>John</td>
        <td>Smith</td>
        <td>Mr</td>
        <td>HR</td>
        <td>HR Assistant</td>
        <td>1</td>
    </tr>
    <tr>
        <td>2</td>
        <td>Jane</td>
        <td>Doe</td>
        <td>Mrs</td>
        <td>Sales</td>
        <td>Sales Executive</td>
    </tr>
    <tr>
        <td>3</td>
        <td>John</td>
        <td>Doe</td>
        <td>Mr</td>
        <td>R&D</td>
        <td>Data Scientist</td>
        <td>1</td>
    </tr>
</table>
<br>
<h1>Awards</h1>
<table>
    <tr>
        <th>year</th>
        <th>title</th>
    </tr>
    <tr>
        <td>2016</td>
        <td>Best at Everything</td>
    </tr>
</table>
<br>
<h1>warnings</h1>
<table>
    <tr>
        <th>year</th>
        <th>reason</th>
    </tr>
    <tr>
        <td>2016</td>
        <td>Farted in the coffee machine</td>
    </tr>
</table>

Dot notation

You can also specify specifc fields to get based on dot notation, such as:

new OutputGenerator({ new Converter().convertJson(apiJson,{whiteList: ['prefs.backgroundImageScaled.url'])});

Or

new OutputGenerator({ new Converter().convertJson(apiJson,{whiteList: ['name', 'cards.*'])});

Contributing

  • Clone the repo and run npm install.
  • Create a new feature branch: git checkout -b feature/your-feature-branch-name.
  • Write a test in the __tests__ folder for your feature.
  • Write the code to get the test passing, running npm run test.
  • Push your branch up and submit a pull request.

Note: I have configured a launch.json for vscode that should allow for playing around with anything in index.ts and hitting f5 to debug.

Publishing

  • npm version patch
  • npm publish