如何解析JSON字符串并在Linux上使用Python进行打印?

时间:2017-02-06 08:42:36

标签: python json linux

这是一个非常基本的问题,但我根本不懂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

1 个答案:

答案 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>