2016-10-09 3 views
-3
{ name: 'anonymous', text: 'Hello' } 
{ name: 'anonymous', text: 'How are you' } 
{ name: 'anonymous', text: 'I am fine' } 

Этот код возвращается Firebase, и я получаю ошибку No JSON object could be decoded. Я думаю, что это должно что-то сделать с действительностью формата JSON.JSON посланный Firebase недействителен

Я получаю данные JSON, используя SDB Firebase Node.JS. Затем я передаю его Python с помощью Pyshell. Когда я использую json.loads в питона, тт говорит:

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") 
+0

В чем вопрос? Да, это недействительный JSON, если он предназначен для JSON, по крайней мере четырьмя различными способами: 1. Нет ни одного значения root (например, объекта или массива). 2. Между объектами нет запятых. 3. Клавиши не входят в двойные кавычки. 4. Строки не заключаются в двойные кавычки. –

+0

@ T.J.Crowder, но эти данные не генерируются мной. Он создается базой данных реального времени firebase. Как программно форматировать его каждый раз, когда я получаю данные, чтобы я мог обработать его дальше? –

+0

@AakashBansal Это ответ от сервера FCM? Или другой вызов API? –

ответ

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 в мире.

Если вы хотите знать, что является реальным ответом затем использовать curl:

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

и если вы видите недопустимую JSON там, то пришло время, чтобы связаться со службой поддержки Firebase.

Формат JSON объясняется на http://json.org/ - это самый простой формат данных.

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); 


Кстати, спасибо всем за руководство меня.

Смежные вопросы