Questa è una domanda piuttosto semplice, ma non conosco affatto Python e vi chiedo ragazzi.
Voglio analizzare una stringa JSON su comando Linux using Python
. e voglio stampare se solo il valore di id
colonna nella stringa JSON è "ok"
.
Per esempio,
extected (1) -> se id == ok$ echo "{"id": "ok", "name": "b"}" | python -c "import json,sys; `blah blah blah....."
{"id": "ok", "name": "b"}
extected (2) -> if id! = ok
$ echo "{"id": "no", "name": "a"}" | python -c "import json,sys; `blah blah blah....."
(empty)
Ho provato molti tentativi per risolvere questo problema, ma tutti falliti ..
echo "{"id":"ok", "name": "a"}" | python -c "import json,sys; d=sys.stdin; obj=json.load(d); print (d if obj["id"] == "ok" else "")"
<open file "<stdin>", mode "r" at 0x7fb6391060c0>
Quindi ho pensato variabile d
è un oggetto, non un valore. Quindi ho provato a usare read()
.
echo "{"id":"ok", "name": "a"}" | python -c "import json,sys; d=sys.stdin; obj=json.load(d); print (d.read() if obj["id"] == "ok" else "")"
(empty)
Non so capire perché non viene stampato nulla ..
Per favore, aiutami T.T
risposte:
1 per risposta № 1Hai ragione d
essere un oggetto. Dovresti vedere cosa è stato letto da json.parse
anziché:
echo "{"id":"ok", "name": "a"}" | python -c "import json,sys; d=sys.stdin; obj=json.load(d); print (obj if obj["id"] == "ok" else "")"
Se si desidera modificare l'output nella sintassi JSON standard obj
a json.dumps(obj)
.
Il motivo per cui la tua seconda soluzione non funziona è perché json.parse
già letto tutti i contenuti di stdin e read()
non reimposta la posizione del flusso (che non è possibile per stdin iniziare).