2010-10-02 21 views
29

是否可以將json字符串(例如從twitter搜索json服務返回的字符串)轉換爲簡單的字符串對象。下面是從JSON服務返回的數據的小圖示:將json字符串轉換爲python對象

{ 
results:[...], 
"max_id":1346534, 
"since_id":0, 
"refresh_url":"?since_id=26202877001&q=twitter", 
. 
. 
. 
} 

比方說,我的結果莫名其妙地存儲在一些變量,比如說,OBJ。我希望得到適當的值類似如下:

print obj.max_id 
print obj.since_id 

我使用simplejson.load()json.load()嘗試,但它給了我使用simplejson.load()json.load(),但一個錯誤說'str' object has no attribute 'read'

回答

65

我試着給了我一個錯誤說'str' object has no attribute 'read'

從字符串加載,使用json.loads()(注意「S」)。

更高效地跳過將響應讀入字符串的步驟,並將響應傳遞給json.load()

+0

哦,不知道,我得到一本字典。無論如何,這是罰款的時刻... – deostroll 2010-10-02 20:53:49

0

,如果你不知道的數據將是一個文件或字符串....使用

import StringIO as io 
youMagicData={ 
results:[...], 
"max_id":1346534, 
"since_id":0, 
"refresh_url":"?since_id=26202877001&q=twitter", 
. 
. 
. 
} 

magicJsonData=json.loads(io.StringIO(str(youMagicData)))#this is where you need to fix 
print magicJsonData 
#viewing fron the center out... 
#youMagicData{}>str()>fileObject>json.loads 
#json.loads(io.StringIO(str(youMagicData))) works really fast in my program and it would work here so stop wasting both our reputation here and stop down voting because you have to read this twice 

https://docs.python.org/3/library/io.html#text-i-o

json.loads從Python內置庫,JSON .loads需要一個文件對象,並且不檢查它傳遞的是什麼,所以它仍然調用read函數,因爲文件對象在你調用read()時只會放棄數據。所以,因爲內置的字符串類沒有讀取功能,我們需要一個包裝。所以,StringIO.StringIO函數簡而言之,就是將字符串類和文件類分開,並將內部工作網格化,從而獲得我的低細節重建https://gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1 ,因此最終完成了它的任務,就像編寫一個ram文件並將其一行一行地截取出來一樣。 ...

0
magicJsonData=json.loads(io.StringIO((youMagicData).decode("utf-8")) 
print(magicJsonData) 

任何請求或HTTP服務器的JSON字符串的類型爲字節數組 的將它們轉換到字符串,(因爲問題是關於字節數組從服務器請求返回的,對吧?)

res = json.loads((response.content).decode("utf-8")) 
print(res) 

這裏的response.content可以是一個字節數組或任何從服務器請求返回的字符串,它被解碼爲字符串(utf-8)格式並作爲python數組返回。

或者只是使用一個字節組,但使用json.load代替json.loads

相關問題