2013-02-15 38 views
2

我試圖在Python中使用requests庫將數據(原始值)推送到Firebase位置。通過REST API將原始值推送到Firebase

說,我有urladdurl與認證令牌的位置)。在該位置,我想推string,比如International。基於答案here,我試圖

data = {'.value': 'International'} 

p = requests.post(urladd, data = sjson.dumps(data)) 

我得到<Response [400]>p.text給我:

u'{\n "error" : "Invalid data; couldn\'t parse JSON object, array, or value. Perhaps you\'re using invalid characters in your key names."\n}\n' 

看來他們關鍵.value無效。但這就是上面提到的答案。任何想法,爲什麼這可能無法正常工作,或者我如何通過Python做到這一點?連接或身份驗證沒有問題,因爲以下工作。但是,這會推送一個對象而不是原始值。

data = {'name': 'International'} 

p = requests.post(urladd, data = sjson.dumps(data)) 

感謝您的幫助。

+0

對於解決方法,難道你只是在路徑上移動一個級別?例如,如果我試圖將myinstance.firebaseio.com/some/place設置爲「國際」:'requests.post('myinstance.firebaseio.com/some',{place:「International」}); – Kato 2013-02-15 02:51:19

回答

2

您所鏈接的答案是您想爲某個值指定優先級的特殊情況。一般來說,'.value'是一個無效的名字,會引發錯誤。

如果你想寫的只是「國際」,你應該編寫字符串JSON版本的數據。我沒有在我面前一個Python的例子,但是curl命令是:

捲曲-X POST -d 「\」 國際\ 「」 https://開頭...

+0

謝謝,安德魯。對於任何正在尋找如何在Python中執行此操作的人,我已在下面發佈了一個答案。 – Curious2learn 2013-02-15 12:28:43

2

安德魯的回答以上作品。如果其他人想知道如何使用Python中的requests庫來做到這一點,我認爲這會有所幫助。

import simplejson as sjson 

data = sjson.dumps("International") 

p = requests.post(urladd, data = data) 

出於某種原因,我曾認爲數據在轉換爲字符串化JSON版本之前必須採用字典格式。情況並非如此,一個簡單的字符串可用作sjson.dumps()的輸入。