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变量周围添加[]
按下一个空项
感谢您的帮助
答案 0 :(得分:4)
我会强烈建议不要手工制作JSON。而是构建结构,然后让JSON.stringify
进行工作。
您还误用了_.map
。如果您没有从回调中返回值,并且没有使用_.map
的返回值,那么_.map
是错误的工具。您可以改用_.each
。 (或者使用ES5的forEach
。)或者,当然,从回调中返回一些东西并使用返回的结果,因为您似乎确实在进行映射操作。
这就是我想您要尝试做的事情:
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
是因为您在那儿,但是您可以轻松地使用ES5的Array.prototype.map
。
答案 1 :(得分:-1)
另一种解决方案是用[B]代替[A]行,但这不如@t-j-crowder'解决方案
[A] verticalBarChartData.push({ "name": "${index}", "series": [${transactionsPerEntry}]}
);
[B] verticalBarChartData.push( JSON.parse ({ "name": "${index}", "series": [${transactionsPerEntry}]}
));