/ / Come posso analizzare la stringa JSON e stamparla usando Python su Linux? - Python, Json, Linux

Come posso analizzare la stringa JSON e stamparla usando Python su Linux? - Python, JSON, Linux

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 № 1

Hai 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).