这是一个非常基本的问题,但我根本不懂Python,我问你们。
我想在Linux命令using Python
上解析JSON字符串。
如果只有JSON字符串中id
列的值为"ok"
,我想打印。
例如,
延伸的(1) - >如果id == ok$ echo '{"id": "ok", "name": "b"}' | python -c 'import json,sys; `blah blah blah.....'
{"id": "ok", "name": "b"}
延伸的(2) - >如果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)
我不知道为什么没有打印出来......
请帮帮我T.T
答案 0 :(得分: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)
。
你的第二个解决方案不起作用的原因是因为json.parse
已经读取了stdin中的所有内容而read()
没有重置流位置(stdin开始时不可能)。 / p>