web-dev-qa-db-fra.com

Python json.load (sys.stdin) me fait u '...' au lieu de guillemets doubles autour de Strings

Quand je fais:

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)

Je reçois

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

Et ce n'est pas un Json valide car lorsque j'essaie de POST sur Parse.com, je reçois

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

et tout validateur JSON me donne Error:Strings should be wrapped in double quotes.

Comment faire un JSON valide du data?

11
Marian Paździoch

print affichera simplement la représentation python de l'objet que vous passez (que vous avez désérialisé avec json.load). Essaye ça:

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

json.dumps sérialise un objet python en json.

20
m fran

Vous avez mal compris ce que json.load fait: il désérialise à partir de JSON, c'est-à-dire qu'il crée Python objets à partir de chaînes JSON.

Mais je ne peux pas vraiment comprendre ce que vous faites; si vous avez déjà transmis JSON depuis stdin, pourquoi essayez-vous de le convertir? Passez-le directement à votre API.

2
Daniel Roseman