json.loads TypeError: строковые индексы должны быть целыми числами - PullRequest
0 голосов
/ 26 мая 2018

Вот содержимое файла JSON

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

Вот код, в котором я пытаюсь разобрать вышеуказанное содержимое.Этот же код прекрасно работает для анализа других файлов JSON.Но при разборе вышеупомянутого содержимого я получаю сообщение об ошибке «Ошибка типа: строковые индексы должны быть целыми числами».

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 голосов
/ 26 мая 2018

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 получает второе значение.

0 голосов
/ 26 мая 2018
for each in data['error']:  

обратите внимание, что data['error'] является диктом, поэтому for each in data['error'] выполняет итерацию по диктовке, что означает, что each является ключом dict, может быть, в любом случае, "class" или "message", each является строкой и может быть проиндексирован только с помощью int.

Ваши данные json должны быть такими:

{
"error": [{
"class": "com.attask.common.AuthenticationException",
"message": "Authentication Exception: Authentication Exception: {0}"
}]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...