2015-12-03 3 views
0

Я тестирую приложение для флэша, где мне нужно публиковать некоторые пары ключевых значений, но мое флеш-приложение ожидает их в формате JSON. В командной строке я создал JSON из моих пар кВ примерно так:TypeError: строковые индексы должны быть целыми числами с флягой json

>>> import json 
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=4, separators=(',', ': ')) 
{ 
    "4": 5, 
    "6": 7 
} 

, когда я это в почтальона:

enter image description here

и отправить его в мое приложение я получаю:

TypeError: string indices must be integers 

Однако если я использую:

[{ 
    "4": 5, 
    "6": 7 
}] 

Это работает! Почему это происходит?

Вот код приложения. ошибка происходит в последней строке:

json = request.get_json(force=True) # receives request from php 
for j in json: 
     print str(j) 

test = [{'ad': j['4'], 'token':j['6']} for j in json] 
+0

Проблема заключается в 'j ['4']' где 'j' является строкой. Вместо этого попробуйте 'j [4]'. Вы понимаете, что 'j' является последним ключом в объекте JSON? Если значение 'j' равно' '4" ',' j [4] 'также выйдет из строя, но с' IndexError'. Вероятно, вы хотите 'json [0] [" 4 "]'. –

ответ

1

Вам необходимо пройти через list из dict потому, что ваш код пытается обработать список dicts. Проблема не связана с json, это как раз то, как вы читаете в структуре данных. Вот ваш код как один скрипт, демонстрирующий проблему. Я изменил имя на data, чтобы избежать путаницы с json, и я использую repr вместо str, чтобы устранить проблему.

data = {'4': 5, '6': 7} 

for j in data: 
     print repr(j) 

test = [{'ad': j['ad'], 'token':j['token']} for j in data] 

Запуск это приводит к

'4' 
'6' 
Traceback (most recent call last): 
    File "x.py", line 6, in <module> 
    test = [{'ad': j['ad'], 'token':j['token']} for j in data] 
TypeError: string indices must be integers, not str 

Вашего заявления для печати показывает, что переборе data производит струны, так что имеет смысл, что j['token'] потерпит неудачу. Из внешнего вида вашего кода кажется, что вы хотите создать список dicts из списка dicts в качестве входных данных. И как только вы вставляете входные данные в список, он ... хорошо падает, потому что у dicts нет ключей, которые вы требуете ... но ближе!

+0

Привет, tdelaney, большое спасибо за деконструкцию этого для меня, у меня есть следующий вопрос по адресу http://stackoverflow.com/questions/34093533/iterating-through-key-value-pairs-in-a-python-dictionary – user61629

Смежные вопросы