Convert data which is in an array table format to a JSON object:
Imagine a table:
| a | b | c |
|---|---|---|
| 1 | 2 | 3 |
| do | re | mi |
Would be represented as table data like so:
[
["a", "b", "c"],
[1, 2, 3],
["do", "re", "mi"]
]If the first row is the header (X axis), then the output JSON would look like this:
[
{
"a": 1,
"b": 2,
"c": 3
},
{
"a": "do"
"b": "re",
"c": "mi"
}
]If the first column (Y axis) is the header, then the output JSON would look like this:
[
{
"a": "b",
"1": 2,
"do": "re"
},
{
"a": "c",
"1": 3,
"do": "mi"
}
]You can even output an object with multiple headers mapped as nested properties, like so:
| Tom | Dick | Harriette | |
|---|---|---|---|
| Age | 24 | 32 | 40 |
| Country | NZ | AU | FR |
const input = [
["", "Tom", "Dick", "Harriette"],
["Age", 24, 32, 40],
["Country", "NZ", "AU", "FR"],
];
const output = convertTableDataToJSON(input, {
preset: "row.column",
});
/*
{
"Tom": {
"Age": 24,
"Country": "NZ"
},
"Dick": {
"Age": 24,
"Country": "AU"
},
"Harriette": {
"Age": 40,
"Country": "FR"
}
}
*/ npm i table-data-to-json
yarn add table-data-to-jsonImport and use convertTableDataToJSON() within your project like so:
import convertTableDataToJSON from "table-data-to-json";
const output = convertTableDataToJSON(
[
["a", "b", "c"],
[1, 2, 3],
["do", "re", "mi"],
],
{
preset: "row",
}
);| Property | Type | Description |
|---|---|---|
preset |
String | Accepted values:
|
headers |
TableDataConfigHeaders |
In case the presets don't cover your use-case, you can specify the headers here. |
You can use other libraries like csv-parse to convert your CSV file/data to the array table data format, then run convertTableDataToJSON().
Use sister package xlsx-table-data-to-json which has some additional config and methods to handle sheets and convert cell data to usable formats.
This package uses xlsx to handle XLSX and CSV files/data.
To download external dependencies:
npm iTo run tests (using Jest):
npm test
npm run test:watchGot cool ideas? Have questions or feedback? Found a bug? Post an issue
Added a feature? Fixed a bug? Post a PR