Как добавить [] открывающие и закрывающие квадратные скобки вокруг JSON в 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. нажать пустой элемент

Спасибо за помощь

Где заявлено verticalBarChartData? Где он инициализирован?

T.J. Crowder 23.06.2019 12:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
397
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы сильно рекомендовал не создавать 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 решение соответствует запросу. ваши комментарии помогли мне сформировать правильное решение

Abdelkrim 24.06.2019 02:10

Другим решением является замена строки [A] на [B], но это менее удобно, чем решение @t-j-crowder '

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

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

Другие вопросы по теме