これはかなり基本的な質問ですが、私はPythonを全く知らないので、皆さんに尋ねます。
LinuxコマンドでJSON文字列を解析したい using Python
。 私が印刷したいのは、 id
JSON文字列の列は "ok"
.
例えば、
extected(1) - > 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)
私はこの問題を解決するために多くの試みを試みましたが、すべてが失敗しました..
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>
だから私は可変 d
値ではなくオブジェクトです。だから私は 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)
何も印刷されていない理由を理解していません。
私を助けてください。
回答:
回答№1は1あなたは正しいと思う d
オブジェクトである。読み込まれたものを出力する必要があります。 json.parse
代わりに:
echo "{"id":"ok", "name": "a"}" | python -c "import json,sys; d=sys.stdin; obj=json.load(d); print (obj if obj["id"] == "ok" else "")"
出力を標準のJSON構文で変更したい場合 obj
に json.dumps(obj)
.
2つ目の解決策がうまくいかない理由は、 json.parse
すでにstdinからすべての内容を読み込み read()
ストリームの位置をリセットしません(これはstdinでは開始できません)。