“str指数必须是整数”是什么意思?

时间:2010-04-27 10:21:25

标签: python jython

我正在使用jython中的dicts,它是通过导入/解析JSON创建的。使用某些部分,我看到以下消息:

TypeError: str indices must be integers

当我执行以下操作时会发生这种情况:

if jsondata['foo']['bar'].lower() == 'baz':
    ...

jsondata的样子:

{'foo': {'bar':'baz'} }

这是什么意思,我该如何解决?

3 个答案:

答案 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没有被解码,因此仍然是纯文本,这当然会引起索引错误。