在命令行过滤 JSON
Filter JSON on the command line
我想在命令行过滤JSON。
任务:打印json列表中每个词典的“名称”。
示例json:
[
{
"id":"d963984c-1075-4d25-8cd0-eae9a7e2d130",
"extra":{
"foo":false,
"bar":null
},
"created_at":"2020-05-06T15:31:59Z",
"name":"NAME1"
},
{
"id":"ee63984c-1075-4d25-8cd0-eae9a7e2d1xx",
"name":"NAME2"
}
]
期望的输出:
NAME1
NAME2
这个脚本可以工作:
#!/usr/bin/env python
import json
import sys
for item in json.loads(sys.stdin.read()):
print(item['name'])
但是因为我很懒,所以我正在寻找一个可以减少输入的解决方案。例如在管道中的命令行中:
curl https://example.com/get-json | MAGIC FILTER
我在 code golf 问过,但他们告诉我在这里问更有意义。
你可以使用 jq https://stedolan.github.io/jq/manual/
% curl https://example.com/get-json | jq -r '.[].name'
NAME1
NAME2
-r
如果过滤器的结果是字符串,那么它将直接写入标准输出,而不是格式化为带引号JSON 的字符串
我想在命令行过滤JSON。
任务:打印json列表中每个词典的“名称”。
示例json:
[
{
"id":"d963984c-1075-4d25-8cd0-eae9a7e2d130",
"extra":{
"foo":false,
"bar":null
},
"created_at":"2020-05-06T15:31:59Z",
"name":"NAME1"
},
{
"id":"ee63984c-1075-4d25-8cd0-eae9a7e2d1xx",
"name":"NAME2"
}
]
期望的输出:
NAME1
NAME2
这个脚本可以工作:
#!/usr/bin/env python
import json
import sys
for item in json.loads(sys.stdin.read()):
print(item['name'])
但是因为我很懒,所以我正在寻找一个可以减少输入的解决方案。例如在管道中的命令行中:
curl https://example.com/get-json | MAGIC FILTER
我在 code golf 问过,但他们告诉我在这里问更有意义。
你可以使用 jq https://stedolan.github.io/jq/manual/
% curl https://example.com/get-json | jq -r '.[].name'
NAME1
NAME2
-r
如果过滤器的结果是字符串,那么它将直接写入标准输出,而不是格式化为带引号JSON 的字符串