Python:字符串索引必须是整数

Python:字符串索引必须是整数,python,json,influxdb,Python,Json,Influxdb,我从stdin那里得到这个字符串 {u'trades':[定制(时间=1418854520,序列号=47998,时间戳=1418854517, 价格=322,金额=0.269664,tid=48106793,类型=u'ask', 开始=1418847319,结束=1418847320),自定义(时间=1418854520,序列号=47997, 时间戳=1418854517,价格=322,金额=0.1,tid=48106794, 类型=u'ask',开始=1418847319,结束=1418847

我从stdin那里得到这个字符串

{u'trades':[定制(时间=1418854520,序列号=47998,时间戳=1418854517, 价格=322,金额=0.269664,tid=48106793,类型=u'ask', 开始=1418847319,结束=1418847320),自定义(时间=1418854520,序列号=47997, 时间戳=1418854517,价格=322,金额=0.1,tid=48106794, 类型=u'ask',开始=1418847319,结束=1418847320), 定制(时间=1418854520,序列号=47996,时间戳=1418854517,价格=321.596, 金额=0.011,tid=48106795,类型=u'ask',起点=1418847319, 结束=1418847320)]}

当我尝试访问
jsonload[“交易”]
时,我的程序失败。如果我使用
jsonload[0]
我只收到一个字符:
{

我在从
stdin
获取文本时检查了这不是问题,但我不知道这是收到的格式问题(因为我使用了入侵库)还是python代码中的问题。我尝试了许多关于
json.load/s
json.dump/s
的组合,但都没有成功

inputdata = sys.stdin.read()

jsondump = json.dumps(inputdata)

jsonload = json.loads(jsondump)

print jsonload
print type(jsonload) # return me "<type 'unicode'>"
print repr(jsonload) # return me same but with u" ..same string.... "
for row in jsonload["trades"]: # error here: TypeError: string indices must be integers
inputdata=sys.stdin.read()
jsondump=json.dumps(inputdata)
jsonload=json.loads(jsondump)
打印jsonload
打印类型(jsonload)#返回我“”
print repr(jsonload)#返回相同的,但带有u“.相同的字符串…”
对于jsonload[“交易”]中的行:#此处错误:类型错误:字符串索引必须是整数

将输入数据读入字符串。然后,通过
JSON.dumps
将其转换为JSON编码的字符串。然后,使用
JSON.loads
将其转换回普通字符串。您在任何时候都没有将原始数据解释为JSON

尝试从json转换输入数据:

inputdata = sys.stdin.read()
jsonload = json.loads(inputdata)
但是,这将不起作用,因为您的代码段中没有有效的JSON数据。它看起来像是序列化的python代码。您可以使用


使用
u'trades'
可以看出您有一个unicode python字符串。JSON等价物是
“trades”
。要转换python代码,您可以使用它,但如果数据来自不受信任的源,这是一个危险的操作。

您的
jsonload
是一个
字符串,而不是
dict
。请尝试
jsonload=json.loads(inputdata)
@jornsharpe,它会返回不同的错误“ValueError:应为属性名:第1行第2列(char 1)”,但在运行json.loads时可能是您的
inputdata
不是有效的json。@tobias_k我必须在之前转换为dict吗?是的,打印类型(jsonload)#返回我”"。我现在阅读了有关eval的内容,但它是一个受信任的环境,因为我从另一个脚本生成了输出,但我不喜欢使用它。但我不明白为什么入侵库可以工作,但对我来说不是,我想是的,我忘了在中间做些什么。在您的原始代码中,它实际上只是表明您的字符串是unicode。您没有PAR然后我开始研究如何解析unicode,对吗?不,unicode是字符串的一种格式。我建议您需要生成JSON数据,而不是字符串化的python。