将json字符串转换为python对象

时间:2010-10-02 20:25:47

标签: python json

是否可以将json字符串(例如,从twitter搜索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'

3 个答案:

答案 0 :(得分:76)

  

我已尝试使用simplejson.load()json.load(),但它错误地说'str' object has no attribute 'read'

要从字符串加载,请使用json.loads()(注意's')。

更有效率,跳过将响应读入字符串的步骤,然后将响应传递给json.load()

答案 1 :(得分: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

来自python内置库的json.loads,json.loads需要一个文件对象并且不检查它传递的是什么,所以它仍然会调用你传递的函数的read函数,因为文件对象只放弃了调用read()时的数据。因为内置的字符串类没有read函数,我们需要一个包装器。所以StringIO.StringIO函数简而言之,是对字符串类和文件类进行子类化并对内部工作进行网格化,这听到了我的低细节重建https://gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1 所以最后它就像写一个ram文件并在一行中开出来一样......

答案 2 :(得分:0)

TreeViewer treeViewer = new TreeViewer(parent);
treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
treeViewer.setContentProvider(new WorkbenchContentProvider());
treeViewer.setLabelProvider(new WorkbenchLabelProvider());
treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());

来自任何请求或http服务器的json字符串是字节数组类型 将它们转换为字符串,(因为问题是关于从服务器请求返回的字节数组,对吗?)

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

这里res = json.loads((response.content).decode("utf-8") ) print(res) 可以是字节数组或来自服务器请求的任何返回字符串,它被解码为字符串(utf-8)格式并作为python数组返回。

或者只是使用bytearray但使用json.load而不是json.loads