将JSON字符串转换为Python对象
有没有办法把一个json字符串(比如从推特搜索的json服务返回的那种)转换成简单的字符串对象呢?下面是从这个json服务返回的数据的小示例:
{
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()
,但是出现了一个错误,提示说'str' object has no attribute 'read'
,意思是说字符串对象没有'read'这个属性。
2 个回答
如果你不确定数据是文件还是字符串,可以使用下面的代码:
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
在Python的内置库中,有一个叫json.loads的功能。这个功能需要一个文件对象,但它不会检查你传给它的是什么,所以它会调用你传入的对象的read函数。文件对象只有在你调用read()时才会提供数据。因此,由于内置的字符串类没有read函数,我们需要一个“包装器”。这里的StringIO.StringIO函数,简单来说,就是同时继承了字符串类和文件类的功能。这样做的目的是为了让字符串也能像文件一样读取。你可以在这里查看我详细的解释:https://gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1。最后,这样做就像是在一行代码中同时创建一个临时文件并把它转成JSON格式。
我试过用
simplejson.load()
和json.load()
,但是出现了一个错误,提示'str' object has no attribute 'read'
。
如果你想从一个字符串中加载数据,可以使用 json.loads()
(注意这里有个's')。
更有效的方法是,直接把响应传给 json.load()
,省去先把响应读成字符串的步骤。