Позвольте мне объяснить, что здесь происходит
console.log(doc.id, ':', doc.data())
Выгружает из системы информацию, как вы думаете, вы бы хотели, чтобы это было
json.push(doc.id, ':', doc.data())
вставляет 3 элемента в массив каждый раз при его вызове.
Что вы действительно хотите сделать, так это правильно преобразовать данные в объект с помощью функции карты. Я делаю некоторые предположения на основе всей информации, которая у меня есть, но я предполагаю, что вы хотите сделать что-то вроде
var docs snapshot.map( doc => ({[doc.id] : doc.data()})
json.push(docs)
вместо
snapshot.forEach((doc) => {
console.log(doc.id, ':', doc.data())
json.push(doc.id, ':', doc.data())
})
Вы также можете сделать (это немного более подробно, чем метод map, но по сути он делает то же самое. Функция map похожа на select в sql или Linq, ее удобно преобразовывать данные из одной формы в другую ?
snapshot.forEach((doc) => {
var currentItem = {[doc.id] : doc.data()}
json.push(currentItem)
})
Поскольку вы использовали некоторую нотацию es6, я предполагаю, что вычисляемые имена свойств поддерживаются, если не дайте мне знать, и я предложу другое решение