const _ = require('lodash');
let dataGroupedByMndtId = _.groupBy(
_.orderBy(data.Entries, 'mndtId'), 'mndtId'
);
let transactionsPerEntry = [];
_
.map(dataGroupedByMndtId, (transactions, index) => {
// verticalBarChartData.push(`{ "name": "${index}"}`);
_.map(
transactions, (transaction, index) => {
transactionsPerEntry.push(`{ "name": "${transaction.date}", "value": "${transaction.amount}"}`);
}
);
verticalBarChartData.push(`{ "name": "${index}", "series": [${transactionsPerEntry}]}`);
transactionsPerEntry = [];
});
outputJsonFile = 'generated.json';
outputJsonPath = path.join(__dirname, 'data', outputJsonFile);
try {
fs.writeFileSync(outputJsonPath, verticalBarChartData, { mode: 0o755 });
} catch (err) {
// An error occurred
console.error(err);
}
{
"name": "1/0003/1",
"series": [{
"name": "2019-04-05T00:00:00Z",
"value": 20.87
}, {
"name": "2019-03-03T00:00:00Z",
"value": 5.74
}]
}, {
"name": "1/0004/1",
"series": [{
"name": "2019-04-03T00:00:00Z",
"value": 15.7
}, {
"name": "2019-03-26T00:00:00Z",
"value": 0.13
}]
}
Как добавить закрывающие квадратные скобки?
Я пробовал несколько способов:
добавление закрывающих скобок (stringify) и разбор строки (JSON.parse), но квадратные скобки исчезают
добавить [] вокруг переменной verticalBarChart
нажать пустой элемент
Спасибо за помощь
Я бы сильно рекомендовал не создавать JSON вручную. Вместо этого постройте структуру, а затем позвольте JSON.stringify
сделать всю работу.
Вы также неправильно используете _.map
. Если вы не возвращаете значение из его обратного вызова и не используете возвращаемое значение _.map
, _.map
— неправильный инструмент. Вместо этого вы бы использовали _.each
. (Или используйте forEach
ES5.) Или, конечно, верните что-то из обратного вызова и используйте возвращенный результат, поскольку вы, похоже, выполняете операцию сопоставления.
Вот что, я думаю, вы пытаетесь сделать:
const _ = require('lodash');
let dataGroupedByMndtId = _.groupBy(
_.orderBy(data.Entries, 'mndtId'), 'mndtId'
);
let verticalBarChartData = _.map(dataGroupedByMndtId, (transactions, index) => ({
name: String(index), // You seem to want it to be a string, not a number
series: _.map(transactions, (transaction, index) => ({
name: transaction.date, // May need String() around that
value: transaction.amount // And may need String() here too, if you really want a string
}))
}));
outputJsonFile = 'generated.json';
outputJsonPath = path.join(__dirname, 'data', outputJsonFile);
try {
fs.writeFileSync(outputJsonPath, JSON.stringify(verticalBarChartData), { mode: 0o755 });
} catch (err) {
// An error occurred
console.error(err);
}
Я использовал _.map
там, потому что вы были, но вы могли бы так же легко использовать Array.prototype.map
ES5.
@t-j-crowder решение соответствует запросу. ваши комментарии помогли мне сформировать правильное решение
Другим решением является замена строки [A] на [B], но это менее удобно, чем решение @t-j-crowder '
[A] verticalBarChartData.push({ "name": "${index}", "series": [${transactionsPerEntry}]}
);
[B] verticalBarChartData.push(JSON.parse({ "name": "${index}", "series": [${transactionsPerEntry}]}
));
Где заявлено
verticalBarChartData
? Где он инициализирован?