Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase多路径更新“;无效数据;不能';t解析JSON对象、数组或值;_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase多路径更新“;无效数据;不能';t解析JSON对象、数组或值;

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

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

因此,我对所有内容都进行了编码,投入使用,并执行了多路径更新(使用Rest API),但由于以下响应而失败:

"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将(更新)保存为多路径,但无法使其工作。你能复习一下我的问题吗?非常感谢