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

时间:2014-12-18 12:01:03

标签: python json influxdb

我从stdin获得这个字符串。

  

{u'trades':[Custom(时间= 1418854520,sn = 47998,时间戳= 1418854517,   price = 322,amount = 0.269664,tid = 48106793,type = u'ask',   开始= 1418847319,结束= 1418847320),自定义(时间= 1418854520,sn = 47997,   时间戳= 1418854517,价格= 322,金额= 0.1,tid = 48106794,   type = u'ask',start = 1418847319,end = 1418847320),   自定义(时间= 1418854520,sn = 47996,时间戳= 1418854517,价格= 321.596,   amount = 0.011,tid = 48106795,type = u'ask',start = 1418847319,   端= 1418847320)]}

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

我检查了从stdin获取文本不是问题,但是我不知道它是否是接收格式的问题(因为我使用了Incursion库)或者它是否存在问题我的python代码。我尝试了很多关于json.load/sjson.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

1 个答案:

答案 0 :(得分:1)

您将输入数据读入字符串。然后由json.dumps将其转换为JSON编码的字符串。然后使用json.loads将其重新转换为纯字符串。您在任何时候都没有将原始数据解释为JSON。

尝试从json转换输入数据:

inputdata = sys.stdin.read()
jsonload = json.loads(inputdata)

但是这不起作用,因为您的代码段中没有有效的JSON数据。它看起来像序列化的python代码。您可以使用http://jsonlint.com

检查输入数据

使用u'trades'向我显示你有一个unicode python字符串。 JSON等效项为"trades"。要转换python代码,你可以eval它,但如果数据来自不受信任的来源,这是一个危险的操作。