Firebase Realtime Database导入JSON报Invalid JSON file解决方法

这个报错和JSON格式、账号配额无关,核心原因是Firebase Realtime Database网页控制台自带的JSON导入功能有256MB的单文件硬大小限制,你360MB的文件已经超出阈值,系统会直接抛出无效文件的错误,不会做更细的原因提示。
可以选以下任意一种方案完成导入:
- 拆分文件后分批从控制台导入
把原JSON按顶级节点拆分为多个单文件大小不超过250MB的分片(建议留冗余控制在200MB以内),逐个在控制台导入到对应路径即可。拆分时注意保证每个分片都是合法JSON结构,不要破坏原有嵌套关系。如果手动拆分麻烦,可以用本地脚本自动分片,参考Node.js实现:const fs = require('fs'); const sourceData = JSON.parse(fs.readFileSync('./target.json', 'utf8')); const allKeys = Object.keys(sourceData); let currentChunk = {}; let chunkSerial = 1; for (const key of allKeys) { currentChunk[key] = sourceData[key]; const size = Buffer.byteLength(JSON.stringify(currentChunk), 'utf8'); // 单分片控制在200MB,避开阈值 if (size > 200 * 1024 * 1024) { fs.writeFileSync(`./import-chunk-${chunkSerial}.json`, JSON.stringify(currentChunk)); currentChunk = {}; chunkSerial++; } } if (Object.keys(currentChunk).length) { fs.writeFileSync(`./import-chunk-${chunkSerial}.json`, JSON.stringify(currentChunk)); } - 通过Firebase Admin SDK直连接入导入
不走网页控制台通道,没有单文件256MB的导入限制,稳定性更高。操作流程:- 在Firebase控制台项目设置-服务账号页面,生成Realtime Database对应的服务账号私钥,保存到本地
- 本地编写运行导入脚本,注意单次API请求的写入payload不要超过256MB的接口限制,分批次写入即可,参考核心代码:
const admin = require('firebase-admin'); const fs = require('fs'); const serviceCred = require('./your-service-account-key.json'); admin.initializeApp({ credential: admin.credential.cert(serviceCred), databaseURL: "替换为你自己的Realtime Database连接地址" }); const db = admin.database(); const fullData = JSON.parse(fs.readFileSync('./360mb-source.json', 'utf8')); async function runImport() { const entries = Object.entries(fullData); let writeBatch = {}; for (const [nodeKey, nodeValue] of entries) { writeBatch[nodeKey] = nodeValue; const batchSize = Buffer.byteLength(JSON.stringify(writeBatch)); if (batchSize > 200 * 1024 * 1024) { await db.ref().update(writeBatch); writeBatch = {}; } } if (Object.keys(writeBatch).length) { await db.ref().update(writeBatch); } console.log('数据导入完成'); } runImport().catch(err => console.error('导入出错:', err)); - 导入前临时调整数据库规则
不管选哪种导入方式,导入前可以临时把数据库读写规则调整为仅管理员可访问,避免导入过程中因为规则校验触发中断,导入完成后再恢复正式的安全规则即可。
内容的提问来源于stack exchange,提问作者DreamBlue
相关产品推荐
相关产品推荐

