json.loads TypeError:字符串索引必须是整数

时间:2018-05-26 10:18:17

标签: python json python-2.7

以下是JSON文件的内容

{
"error": {
"class": "com.attask.common.AuthenticationException",
"message": "Authentication Exception: Authentication Exception: {0}"
}
}

以下是我尝试解析上述内容的代码。相同的代码可以很好地解析其他JSON文件。但是在解析上面提到的内容时,我得到了一个错误" TypeError:字符串索引必须是整数"。

import json                                     
fObj = open("attask1.json","r");                
res = fObj.read().encode('utf-8');              
fObj.close();
data = json.loads(res);                         
for each in data['error']:                      
    WFErrorClass = each['class'];
    WFErrorMessage = each['message'];
    print WFErrorMessage;
    print WFErrorClass;

任何人都请解释为什么会这样,并建议我如何克服这个

非常感谢任何帮助。

Python版本是2.7.14

注意:缩进是完美的,没有间距错误

2 个答案:

答案 0 :(得分:2)

each不再是字典,而是运行时的字符串:

for each in data['error']:

    print(each) # Returns 'class'

相反,您只需要:

WFErrorClass = data['error']['class'];
WFErrorMessage = data['error']['message'];
print WFErrorMessage;
print WFErrorClass;

由于error获取字典的第一部分,message / class获得第二个值。

答案 1 :(得分:1)

for each in data['error']:  

请注意data['error']是一个字典,因此for each in data['error']正在迭代dict,这意味着each是dict的关键,可能是" class"或者"消息",无论如何,each是一个字符串,只能由int编入索引。

你的json数据应该是:

{
"error": [{
"class": "com.attask.common.AuthenticationException",
"message": "Authentication Exception: Authentication Exception: {0}"
}]
}