/ / Comment puis-je analyser une chaîne JSON et l’imprimer en utilisant Python sous Linux? - python, json, linux

Comment puis-je analyser la chaîne JSON et l'imprimer en utilisant Python sous Linux? - python, json, linux

C’est une question assez fondamentale, mais je ne connais pas du tout Python et je vous le demande.

Je veux analyser une chaîne JSON sur une commande Linux using Python. et je veux imprimer si seulement la valeur de la id la colonne dans la chaîne JSON est "ok".

Par exemple,

extected (1) -> if 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)

J'ai essayé plusieurs fois de résoudre ce problème, mais tout a échoué.

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>

Alors j'ai pensé variable d est un objet, pas une valeur. Alors j'ai essayé d'utiliser 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)

Je ne sais pas comprendre pourquoi rien n’est imprimé ..

S'il vous plaît aidez-moi T.T

Réponses:

1 pour la réponse № 1

Vous avez raison à propos de d être un objet. Vous devriez sortir ce qui a été lu par json.parse au lieu:

echo "{"id":"ok", "name": "a"}" | python -c "import json,sys; d=sys.stdin; obj=json.load(d); print (obj if obj["id"] == "ok" else "")"

Si vous souhaitez que la sortie soit modifiée avec la syntaxe JSON standard obj à json.dumps(obj).

La raison pour laquelle votre deuxième solution ne fonctionne pas, c'est parce que json.parse déjà lu tout le contenu de stdin et read() ne réinitialise pas la position du flux (ce qui n'est pas possible pour commencer par stdin).