【问题标题】:Firebase multi-path update "invalid data; couldn't parse JSON object, array, or value"Firebase 多路径更新“无效数据;无法解析 JSON 对象、数组或值”
【发布时间】:2016-04-14 13:41:33
【问题描述】:

当 Firebase 不久前宣布 multi-path updates 时,我很兴奋。我有一个相当复杂的数据结构,需要写入多个位置来管理实体之间的关系,因此多路径更新来得正是时候——我不必担心进行多次背靠背写入/更新(以及有 Firebase rate-limit me 的风险)。

因此,我将所有内容都编码、扣入并执行了多路径更新(使用 Rest API),结果却被以下响应所击倒:

"error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names."

我查看了the docs,看看我是否在任何键名中使用了无效字符(.$#[]/)。我不是(除了正斜杠,因为这是超级新的和很棒的多路径更新,允许在键中使用这样的字符)。

我很快在 Chrome 中打开了 Javascript 控制台,在我的字符串上运行了JSON.parse(),它解析为一个有效的表,那么问题是什么?

我的更新包含以下内容:

{
  "foo/bar": {
    "data": {
      "baz": 1
    }
  },

  "foo/bar/data": {
    "quu": 2
  }
}

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    在尝试使用官方 support@firebase.com 频道失败后,我开始进行暴力调试。

    我将每个键/值对分别解析为它自己的表,并尝试进行多路径更新,每次更新都有效。这时我知道我遇到了一些奇怪的事情。然后我慢慢地一键建表,直到多路径更新失败,我看到了问题。

    我的更新包含以下内容:

    {
      "foo/bar": {
        "data": {
          "baz": 1
        }
      },
    
      "foo/bar/data": {
        "quu": 2
      }
    }
    

    我希望在 Firebase 中得到结果数据:

    {
      foo: {
        bar: {
          data: {
            baz: 1,
            quu: 2
          }
        }
      }
    }
    

    因此,简单的答案是,多路径更新不能包含写入同一位置(或同一路径中更深的位置)的两个键名。

    现在,我的多路径更新包含超过 20 个键/值对,因此它不像我在此处列出的示例那么容易被发现,所以请放慢我的脚步。我可以理解为什么不允许这样做的原因有很多(请求的原子性,首先应用哪个更新等),但我的问题是 Firebase 返回的错误不仅没有帮助,而且直截了当地指出了错误的方向,使调试变得更加困难。

    因此,答案是将写入 Firebase 中同一位置的两个多路径更新键组合起来,如下所示:

    {
      "foo/bar/data" : {
        "baz": 1,
        "quu": 2
      }
    }
    

    【讨论】:

    • 我正在尝试使用 Firebase REST API 将其保存(更新)为多路径,但无法正常工作。你能复习一下我的问题吗?非常感谢stackoverflow.com/questions/46100421
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多