如何使用 bash shell 提取 JSON 键的值?

如何使用 bash shell 提取 JSON 键的值?

我正在使用 bash shell。我想在我的 shell 脚本中包含一些可以提取 JSON 字符串中某个键的值的内容...

davea$ json='{"id": "abc", "name": "dave"}'

我尝试了“grep”,但失败了

davea$ grep -Po '"id":.*?[^\\]",' $json
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
    [-e pattern] [-f file] [--binary-files=value] [--color=when]
    [--context[=num]] [--directories=action] [--label] [--line-buffered]
    [--null] [pattern] [file ...]

然后我找到了一个涉及Python的解决方案,但这也失败了......

localhost:tmp davea$ echo $json | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]'
  File "<string>", line 1
    import json,sys;obj=json.load(sys.stdin);print obj["id"]

如何提取“id”键的值而不在系统上安装任何额外的东西?

答案1

你的Python代码运行良好。请注意,print如果使用,则可能需要将参数括起来python3

echo "$json" | python2 -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]'

echo "$json" | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["id"])'

或者,使用jq

echo "$json" | jq -r .id

上述所有解决方案的输出:

abc

相关内容