Javascript Firebase多路径更新“;无效数据;不能';t解析JSON对象、数组或值;
当Firebase不久前宣布这一消息时,我很激动。我有一个相当复杂的数据结构,需要写入多个位置以管理实体之间的关系,因此多路径更新来得正是时候——我不必担心进行多次背对背的写入/更新(以及有Firebase的风险) 因此,我对所有内容都进行了编码,投入使用,并执行了多路径更新(使用Rest API),但由于以下响应而失败:Javascript Firebase多路径更新“;无效数据;不能';t解析JSON对象、数组或值;,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,当Firebase不久前宣布这一消息时,我很激动。我有一个相当复杂的数据结构,需要写入多个位置以管理实体之间的关系,因此多路径更新来得正是时候——我不必担心进行多次背对背的写入/更新(以及有Firebase的风险) 因此,我对所有内容都进行了编码,投入使用,并执行了多路径更新(使用Rest API),但由于以下响应而失败: "error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're us
"error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names."
我查看是否在任何键名中使用了无效字符(
,$
,
,[
,]
,/
)。我不是(除了正斜杠,因为这是一个超级新的、令人敬畏的多路径更新,允许在键中使用这样的字符)
我很快在Chrome中打开了Javascript控制台,在我的字符串上运行了JSON.parse()
,它被解析为一个有效的表,那么问题出在哪里呢
我的更新包含以下内容:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
{
"foo/bar/data" : {
"baz": 1,
"quu": 2
}
}
在尝试使用官方软件失败后support@firebase.com频道,我开始了暴力调试 我将每个键/值对分别解析为自己的表,并尝试进行多路径更新,每次都有效。这是我知道我有点奇怪的时候。然后我慢慢地逐键构建整个表,直到多路径更新失败,我发现了问题所在 我的更新包含以下内容:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
{
"foo/bar/data" : {
"baz": 1,
"quu": 2
}
}
我希望得到Firebase中的结果数据:
{
foo: {
bar: {
data: {
baz: 1,
quu: 2
}
}
}
}
因此,简单的答案是,多路径更新不能包含写入同一位置(或同一路径中更深的位置)的两个键名。
现在,我的多路径更新包含了20多个键/值对,所以它不像我在这里展示的示例那样容易发现,所以请稍微放松一下。我可以理解为什么这可能是不允许的(请求的原子性,首先应用哪个更新等),但我的问题是Firebase返回的错误不仅没有帮助,而且直接指出了错误的方向,使调试更加困难。
因此,答案是将写入Firebase中相同位置的两个多路径更新键组合起来,如下所示:
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
{
"foo/bar": {
"data": {
"baz": 1
}
},
"foo/bar/data": {
"quu": 2
}
}
{
"foo/bar/data" : {
"baz": 1,
"quu": 2
}
}
我正在尝试使用Firebase REST API将(更新)保存为多路径,但无法使其工作。你能复习一下我的问题吗?非常感谢