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-json
Import 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 i
To run tests (using Jest):
npm test
npm run test:watch
Got cool ideas? Have questions or feedback? Found a bug? Post an issue
Added a feature? Fixed a bug? Post a PR