[英]TypeError: string indices must be integers with flask json
我正在测试需要在其中发布一些键值对的Flask应用程序,但是我的Flask应用程序期望它们采用JSON格式。 在命令行中,我从kv对创建了json,如下所示:
>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=4, separators=(',', ': '))
{
"4": 5,
"6": 7
}
当我把这个放进邮递员时:
并将其发布到我的应用程序中,我得到:
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]
您需要传入dict
list
,因为您的代码尝试处理dict
列表。 问题与json无关,而恰恰是您在数据结构中的读取方式。 这是将您的代码作为单个脚本演示的问题。 为了避免与json
混淆,我将名称更改为data
,并且我使用了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']
将会失败。 从代码的外观来看,您似乎想从作为输入的字典列表中创建字典列表。 并且一旦将输入字典放入列表中,它就会崩溃……因为字典没有您要求的键...但是更接近!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.