web-dev-qa-db-ja.com

Python json.load(sys.stdin)は、文字列を二重引用符で囲む代わりにu '...'を取得します

私がする時:

import sys, json;
import requests

headers = {'Content-Type': 'application/json',
       'X-Parse-Application-Id': '...',
       'X-Parse-REST-API-Key': '...'}

data = json.load(sys.stdin)
for station in data["data"]:
    print station
    res = requests.post('https://api.parse.com/1/classes/test4', data=station, headers=headers)

私は得る

{u'city': u'London',
...
}

そして、私がPOST Parse.comにそれをしようとするとき、私は得ているので、それは有効なJsonではありません

{"code":107,"error":"invalid JSON"}

そしてJSONバリデーターは私にError:Strings should be wrapped in double quotes.

dataの有効なJSONを作成する方法

11

printは、渡したオブジェクトのpython表現(json.loadで逆シリアル化したもの)を出力するだけです。これを試して:

import sys, json;
data = json.load(sys.stdin)
for station in data["data"]:
    print(json.dumps(station))

json.dumpsは、pythonオブジェクトをシリアライズしてjsonに戻します。

20
m fran

あなたは何を誤解しましたjson.loadは:それをデシリアライズ JSONから、つまり、Python JSON文字列からオブジェクトを作成します。

しかし、私はあなたが何をしているのか本当に理解できません。すでに標準入力からJSONが渡されている場合、なぜそれを変換しようとしているのですか?それを直接APIに渡します。

2
Daniel Roseman