【发布时间】:2019-07-16 20:30:20
【问题描述】:
以下是将 JSON 检索到变量中的命令:
$ JSON=$(curl http://some-url)
$ echo $JSON
{ "a" : "1", "b" : "2", "c" : "3" }
$
需要在 docker 容器上安装jq。 awk 可用
只能使用jq解析,但是
如何使用jq 方法和awk 方法读取“a”和“b”的值?
【问题讨论】:
-
如果你需要一个已经安装在你服务器上的工具,而不是
awk,考虑python;与 awk 不同,Python 附带了一个符合标准的 JSON 解析器。我们已经在知识库中有问答条目,展示了如何从 bash 调用 Python 来提取 JSON 值。 -
{ IFS= read -r -d '' a && IFS= read -r -d '' b && IFS= read -r -d '' c; } < <(python -c $'import sys, json\njson_in = json.load(sys.stdin)\nfor key in sys.argv[1:]:\n\tsys.stdout.write(str(json_in.get(key)))\n\tsys.stdout.write("\\0")' a b c <<<'{"a": 1, "b": 2, "c": 3}'); declare -p a b c,作为为此使用 Python 的示例(即使您的值包含空格、换行符或其他令人惊讶的内容,并且仅运行一次python也可以正常工作,不不管你想提取多少变量)。 -
@CharlesDuffy 我无法在此命令中捕获
LHS中的值LHS =$(echo "$JSON" | python -c "import sys, json; print json.load(sys.stdin)['a']")不起作用。echo "$JSON"工作正常 -
这不是我给你的代码。
-
...除其他问题外,在
=之前添加一个空格使其不再是分配。但实际上,如果您希望我支持某些内容,请测试我给您的确切代码,而不是其他内容。