如何在 Javascript 中的 JSON 周围添加 [] 左方括号和右方括号?
How to add [] opening and closing square brackets around a JSON in Javascript?
1。我正在构建一个 JSON 文件
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);
}
2。生成的 JSON 未包含方括号
{
"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
。如果您没有 return 从其回调中获取值并且您没有使用 _.map
的 return 值,则 _.map
是错误的工具。你会使用 _.each
来代替。 (或者使用 ES5 的 forEach
。)或者当然,return 来自回调的东西并使用 returned 结果,因为你似乎在做映射操作。
这就是我认为你正在尝试做的事情:
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
。
另一种解决方案是用 [B] 替换行 [A] 但这不如 @t-j-crowder ' 解决方案方便
[A]verticalBarChartData.push({ "name": "${index}", "series": [${transactionsPerEntry}]}
);
[B] verticalBarChartData.push(JSON.parse({ "name": "${index}", "series": [${transactionsPerEntry}]}
));
1。我正在构建一个 JSON 文件
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);
}
2。生成的 JSON 未包含方括号
{
"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
。如果您没有 return 从其回调中获取值并且您没有使用 _.map
的 return 值,则 _.map
是错误的工具。你会使用 _.each
来代替。 (或者使用 ES5 的 forEach
。)或者当然,return 来自回调的东西并使用 returned 结果,因为你似乎在做映射操作。
这就是我认为你正在尝试做的事情:
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
。
另一种解决方案是用 [B] 替换行 [A] 但这不如 @t-j-crowder ' 解决方案方便
[A]verticalBarChartData.push({ "name": "${index}", "series": [${transactionsPerEntry}]}
);
[B] verticalBarChartData.push(JSON.parse({ "name": "${index}", "series": [${transactionsPerEntry}]}
));