You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的导入限制,稳定性更高。操作流程:
    1. 在Firebase控制台项目设置-服务账号页面,生成Realtime Database对应的服务账号私钥,保存到本地
    2. 本地编写运行导入脚本,注意单次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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:09:16