-2

我从标准输入得到这个字符串。

{u'trades': [自定义(time=1418854520, sn=47998, timestamp=1418854517, price=322, amount=0.269664, tid=48106793, type=u'ask', start=1418847319, end=1418847320), 自定义(time=1418854520, sn=47997, timestamp=1418854517, price=322, amount=0.1, tid=48106794, type=u'ask', start=1418847319, end=1418847320), Custom(time=1418854520, sn=47996 , timestamp=1418854517, price=321.596, amount=0.011, tid=48106795, type=u'ask', start=1418847319, end=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
4

1 回答 1

1

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

尝试从 json 转换输入数据:

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

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

的使用u'trades'告诉我你有一个 unicode python 字符串。JSON 等价物是"trades". 要转换 python 代码,您可以对其进行评估,但如果数据来自不受信任的来源,这是一个危险的操作。

于 2014-12-18T12:12:12.833 回答