-2

この文字列は stdin から取得します。

{u'trades': [Custom(time=1418854520, sn=47998, timestamp=1418854517, price=322, amount=0.269664, tid=48106793, type=u'ask', start=1418847319, end=1418847320), カスタム(時間=1418854520、sn=47997、タイムスタンプ=1418854517、価格=322、金額=0.1、tid=48106794、タイプ=u'ask'、開始=1418847319、終了=1418847320)、カスタム(時間=1418854520、sn=47996 、タイムスタンプ=1418854517、価格=321.596、金額=0.011、tid=48106795、タイプ=u'ask'、開始=1418847319、終了=1418847320)]}

にアクセスしようとすると、プログラムが失敗しますjsonload["trades"]。使用するjsonload[0]と、次の 1 文字しか受け取りません{

get the text from の問題ではないことを確認しましたがstdin、受信した形式の問題なのか (Incursion ライブラリを使用したため)、それとも Python コードの問題なのかはわかりません。json.load/sandについて多くの組み合わせを試し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
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'、ユニコードの python 文字列があることがわかります。JSON に相当するものは"trades". Python コードを変換するには、それを評価できますが、データが信頼できないソースからのものである場合、これは危険な操作です。

于 2014-12-18T12:12:12.833 に答える