json - console.log 与 json.push 不同
问题描述
我正在使用 node.js 导出我在 firestore 中的集合。
到目前为止,集合文件的连接和选择工作完美。
我正在尝试将结构保存在 json 文件中,但结果不是我所期望的。
这是物理文件中的输出:
在照片的右侧,它将被视为由 console.log 呈现,而在右侧则显示为由 json.push 记录
我无法让物理文件具有console.log 中显示的结构。
我感谢您的所有帮助。
正如您将看到的结构失败:“USBCALI|AFILIADO|uqcMSoxdwCTQoLzS2J6brNTZ3Dy2”,“:”,{.....
应该是:USBCALI|AFILIADO|uqcMSoxdwCTQoLzS2J6brNTZ3Dy2:{.....
这是代码
const jsonfile = require('jsonfile')
function start (db, file, collection) {
const ref = db.collection(collection)
const json = []
console.log(`Getting ${collection}...`)
ref
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
console.log(doc.id, ':', doc.data())
json.push(doc.id, ':', doc.data())
})
console.log(`Writing ${file}...`)
jsonfile.writeFile(file, json, {spaces: 2}, err => {
if (err) {
console.error(err)
} else {
console.log(`Collection ${collection} successfully written to ${file}.`)
}
})
})
.catch((err) => {
console.log('Error getting documents', err)
})
}
module.exports = start
解决方案
让我解释一下这里发生了什么
console.log(doc.id, ':', doc.data())
正在注销您认为您希望的信息
json.push(doc.id, ':', doc.data())
每次调用时都会将 3 个元素推入数组。
您真正想要做的是使用 map 函数将数据正确地操作到对象中。我正在根据我在这里的所有信息做出一些假设,但我猜你想做类似的事情
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 函数就像 sql 或 Linq 中的 select,它可以方便地将数据从一种形式转换为另一种形式
snapshot.forEach((doc) => {
var currentItem = {[doc.id] : doc.data()}
json.push(currentItem)
})
由于您使用了一些 es6 表示法,我假设计算属性名称是支持的,如果不让我知道,我会想出另一个解决方案
推荐阅读
- r - 使用一行作为列名
- javascript - React/Redux 如何访问网络服务中的状态
- firebase - Firebase 云功能图像调整大小
- python - python脚本中的自动完成文件名
- c - nsswitch.conf 中的多个源是否为 getpwent 合并?
- java - Kotlin 代码到 java 的转换
- php - 使用另一个 PHP 文件中的“定义”
- python - 在 Python Zelle 图形中实现多线程
- extjs - ExtJS 如何在单个控制器中有效地存储多个函数的通用值
- python - Django - Google App Engine Cron 300 错误