是否可以将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'
答案 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