TypeError:字符串索引必须是带有烧瓶json的整数

时间:2015-12-03 18:53:52

标签: python json flask

我正在测试一个烧瓶应用程序,我需要发布一些键值对,但我的烧瓶应用程序期望它们是JSON格式。在命令行,我从我的kv对中创建了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]

1 个答案:

答案 0 :(得分:1)

您需要传入list dict个,因为您的代码会尝试处理一系列字符串。这个问题与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

您的print语句显示迭代data会生成字符串,因此j['token']失败是有意义的。从代码的外观来看,您似乎想要从一个dicts列表中创建一个dicts列表作为输入。一旦你把输入的词汇放在一个列表中,它就会崩溃,因为这些词汇没有你所声称的密钥......但是更接近了!