我正在使用 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