我从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/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
答案 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它,但如果数据来自不受信任的来源,这是一个危险的操作。