代码之家  ›  专栏  ›  技术社区  ›  Phillip B Oldham

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

  •  1
  • Phillip B Oldham  · 技术社区  · 14 年前

    我在jython中使用dict,它是从导入/解析json创建的。使用某些部分时,我看到以下消息:

    TypeError: str indices must be integers
    

    当我做以下事情时会发生这种情况:

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

    在哪里? jsondata 看起来像:

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

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

    3 回复  |  直到 14 年前
        1
  •  2
  •   YOU    14 年前

    在从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
    >>>
    

    或者短一点的。

    >>> 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
  •  3
  •   Daniel Roseman    14 年前

    正如marcelo和ivo所说,听起来好像您在尝试访问原始json字符串,而不是首先通过 json.loads(my_json_string) .

        3
  •  1
  •   Ivo Wetzel    14 年前

    实际上你的陈述应该引起 SyntaxError: can't assign to function call 因为你错过了一个 = 从而进行赋值而不是检查相等性。

    既然我在运行您显示的代码时没有得到typeerror,我想您应该首先修复丢失的 = 在那之后再看看StackTrace说了什么。

    但也有可能您的jsondata还没有被解码,因此仍然是纯文本,这当然会导致索引错误。