Firebase 多路径更新 "invalid data; couldn't parse JSON object, array, or value"
Firebase multi-path update "invalid data; couldn't parse JSON object, array, or value"
当 Firebase 宣布 multi-path updates a while back. I have a fairly complex data structure that requires writes to several locations for managing relationships between entities, so multi-path updates came at the perfect time - I didn't have to worry about making several back-to-back writes/updates (and risk having 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()
在我的字符串上,它解析成一个有效的table,所以有什么问题吗?
我的更新包含以下内容:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
在尝试使用官方支持@firebase.com 渠道失败后,我开始进行暴力调试。
我将每个 key/value 对分别解析为自己的 table 并尝试进行多路径更新,并且 每次都有效。 这是当我知道我正在做一些奇怪的事情时。然后我就慢慢的把整个table一键建起来,直到多路径更新失败,才看到问题。
我的更新包含以下内容:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
我希望在 Firebase 中得到结果数据:
{
foo: {
bar: {
data: {
baz: 1,
quu: 2
}
}
}
}
所以,简单的答案是,多路径更新不能包含写入同一位置(或同一路径中更深的位置)的两个键名。
现在,我的多路径更新包含超过 20 个 key/value 对,因此它不像我在此处列出的示例那样容易发现,所以请让我松懈一下。我可以理解为什么不允许这样做(请求的原子性、首先应用哪个更新等),但我的问题是 从 Firebase 返回的错误不仅没有帮助, 它完全指出了我错误的方向,使调试更加困难。
因此,答案是将写入 Firebase 中同一位置的两个多路径更新密钥组合起来,如下所示:
{
"foo/bar/data" : {
"baz": 1,
"quu": 2
}
}
当 Firebase 宣布 multi-path updates a while back. I have a fairly complex data structure that requires writes to several locations for managing relationships between entities, so multi-path updates came at the perfect time - I didn't have to worry about making several back-to-back writes/updates (and risk having 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()
在我的字符串上,它解析成一个有效的table,所以有什么问题吗?
我的更新包含以下内容:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
在尝试使用官方支持@firebase.com 渠道失败后,我开始进行暴力调试。
我将每个 key/value 对分别解析为自己的 table 并尝试进行多路径更新,并且 每次都有效。 这是当我知道我正在做一些奇怪的事情时。然后我就慢慢的把整个table一键建起来,直到多路径更新失败,才看到问题。
我的更新包含以下内容:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
我希望在 Firebase 中得到结果数据:
{
foo: {
bar: {
data: {
baz: 1,
quu: 2
}
}
}
}
所以,简单的答案是,多路径更新不能包含写入同一位置(或同一路径中更深的位置)的两个键名。
现在,我的多路径更新包含超过 20 个 key/value 对,因此它不像我在此处列出的示例那样容易发现,所以请让我松懈一下。我可以理解为什么不允许这样做(请求的原子性、首先应用哪个更新等),但我的问题是 从 Firebase 返回的错误不仅没有帮助, 它完全指出了我错误的方向,使调试更加困难。
因此,答案是将写入 Firebase 中同一位置的两个多路径更新密钥组合起来,如下所示:
{
"foo/bar/data" : {
"baz": 1,
"quu": 2
}
}