str 索引必须是整数"是什么意思?
我正在使用 jython 中的字典,这些字典是通过导入或解析 JSON 创建的。在处理某些部分时,我看到以下信息:
TypeError: str indices must be integers
这个问题发生在我做类似下面的事情时:
if jsondata['foo']['bar'].lower() == 'baz':
...
其中 jsondata
看起来像:
{'foo': {'bar':'baz'} }
这是什么意思,我该如何解决呢?
3 个回答
1
其实你的说法应该会引发一个 SyntaxError: can't assign to function call
的错误,因为你缺少一个 =
,所以你做的是赋值,而不是在检查两个东西是否相等。
由于我在运行你提供的代码时没有遇到 TypeError,我猜测你应该先修复缺少的 =
,然后再看看 Stacktrace(错误追踪信息)上说了什么。
不过也有可能你的 jsondata 还没有被解码,所以它仍然是普通文本,这样的话就会引发索引错误。
3
正如Marcelo和Ivo所说,你似乎是在尝试直接使用原始的JSON字符串,但没有先通过 json.loads(my_json_string)
将它转换成Python可以理解的格式。
2
在从字典里获取数据之前,你需要先检查一下这个东西是不是字典类型,并且要确认里面有没有'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
>>>
或者可以用更简短的方法,直接用字典的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
>>>