Firebase多路径更新"无效数据;无法解析JSON对象,数组或值"

时间:2016-04-14 13:41:34

标签: javascript firebase firebase-realtime-database

当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
  }
}

1 个答案:

答案 0 :(得分:3)

在尝试使用官方的support@firebase.com频道失败后,我接受了暴力调试。

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

我的更新包含以下内容:

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

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

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

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

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

现在,我的多路径更新包含了超过20个键/值对,因此它不像我在这里列出的示例那么容易发现,所以让我有点松懈。我可以理解为什么不允许这样做(请求的原子性,首先应用哪个更新等),但我的问题是从Firebase返回的错误不仅没有帮助,它flat out指出我的方向错误,使调试更加困难。

因此,答案是将写入Firebase中相同位置的两个多路径更新密钥组合如下:

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