繁体   English   中英

如何在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
        }]
    }

我怎么能添加封闭的方括号?

我试过几种方法:

  1. 添加括号(stringify)并解析字符串(JSON.parse)但方括号消失

  2. 在verticalBarChart变量周围添加[]

  3. 推一个空项目

谢谢您的帮助

强烈建议不要手工制作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

另一个解决方案是用[B]替换行[A],但这比@tj-crowder '解决方案更不方便

[A] verticalBarChartData.push( { "name": "${index}", "series": [${transactionsPerEntry}]} );

[B] verticalBarChartData.push( JSON.parse{ "name": "${index}", "series": [${transactionsPerEntry}]} ));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM