Firebase发送的JSON无效

时间:2016-10-09 10:09:49

标签: python json node.js firebase firebase-cloud-messaging

{ name: 'anonymous', text: 'Hello' }
{ name: 'anonymous', text: 'How are you' }
{ name: 'anonymous', text: 'I am fine' }

此代码由Firebase返回,我收到错误No JSON object could be decoded。我认为这必须对JSON格式的有效性做些什么。

我使用Firebase Node.JS SDK获取此JSON数据。然后我使用Pyshell将它传递给Python。当我在python中使用json.loads时,tt说:

C:\Python27>node firebase2.js
{ name: 'anonymous', text: 'Hello' }
{ name: 'anonymous', text: 'How are you' }
{ name: 'anonymous', text: 'I am fine' }
C:\Python27\firebase2.js:40
          if (err) throw err;
                   ^

Error: ValueError: No JSON object could be decoded
    at PythonShell.parseError (C:\Python27\node_modules\python-shell\index.js:183:17)
    at terminateIfNeeded (C:\Python27\node_modules\python-shell\index.js:98:28)
    at ChildProcess.<anonymous> (C:\Python27\node_modules\python-shell\index.js:88:9)
    at emitTwo (events.js:87:13)
    at ChildProcess.emit (events.js:172:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
    ----- Python Traceback -----
    File "my_script.py", line 3, in <module>
      myjson = json.loads(myinput)
    File "C:\Python27\lib\json\__init__.py", line 339, in loads
      return _default_decoder.decode(s)
    File "C:\Python27\lib\json\decoder.py", line 364, in decode
      obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
      raise ValueError("No JSON object could be decoded")

2 个答案:

答案 0 :(得分:1)

这不是一个有效的JSON,我认为你的firebase2.js有问题。

而不是:

{ name: 'anonymous', text: 'Hello' }
{ name: 'anonymous', text: 'How are you' }
{ name: 'anonymous', text: 'I am fine' }

它应输出:

[
  { "name": "anonymous", "text": "Hello" },
  { "name": "anonymous", "text": "How are you" },
  { "name": "anonymous", "text": "I am fine" }
]

所有字符串(包括对象键)都必须用双引号引用。数组必须包含在方括号中,数组元素需要用逗号分隔。

查看您的firebase2.js程序,看看它是如何生成输出的。如果它使用的不是单个:

console.log(JSON.stringify(SOME_VARIABLE));

然后就是你的问题。

无论如何,我更确定Firebase没有返回 {a:'b'}{c:'d'}代替[{"a":"b"},{"c":"d"}] - 这是初学者的一个典型错误,他们不了解JSON格式,这是世界上最大的API提供商之一难以置信的事情。< / p>

如果您想知道什么是真实的回复,请使用curl

curl -v https://example.com/some/endpoint -H 'auth header' ...

如果您在那里看到无效的JSON,那么现在是时候联系Firebase支持了。

JSON格式在http://json.org/上解释 - 这是现有的最简单的数据格式。

答案 1 :(得分:0)

经过一些调试后我收到了错误。

ref.on("child_added", function(snapshot, prevChildKey) {
  var newPost = snapshot.val();
  newPost = JSON.stringify(newPost);      //this line corrected my error
  });

以下行删除了错误:

newPost = JSON.stringify(newPost);
顺便说一句,感谢大家指导我。