我正在使用jython中的dicts,它是通过导入/解析JSON创建的。使用某些部分,我看到以下消息:
TypeError: str indices must be integers
当我执行以下操作时会发生这种情况:
if jsondata['foo']['bar'].lower() == 'baz':
...
jsondata
的样子:
{'foo': {'bar':'baz'} }
这是什么意思,我该如何解决?
答案 0 :(得分:3)
正如Marcelo和Ivo所说,听起来你正试图访问原始的JSON字符串,而不是先通过json.loads(my_json_string)
将其解析为Python。
答案 1 :(得分:2)
在从dict获取数据之前,你需要检查dict的类型和dict中是否存在'z'。
>>> jsondata = {'a': '', 'b': {'z': True} }
>>> for key in jsondata:
... if type(jsondata[key]) is dict and 'z' in jsondata[key].keys() and jsondata[key]['z'] is True:
... print 'yes'
...
yes
>>>
或更短的dict.get
>>> jsondata = {'a': '', 'b': {'z': True}, 'c' :{'zz':True}}
>>> for key in jsondata:
... if type(jsondata[key]) is dict and jsondata[key].get('z',False):
... print 'yes'
...
yes
>>>
答案 2 :(得分:1)
实际上你的陈述应该引发SyntaxError: can't assign to function call
,因为你错过了=
,从而进行了分配而不是检查是否相等。
由于在运行您显示的代码时我没有得到TypeError,我想您首先修复丢失的=
,然后再检查Stacktrace所说的内容。
但也有可能你的jsondata没有被解码,因此仍然是纯文本,这当然会引起索引错误。