Mat*_*att 17 variables bash json input jq
我想在bash中将JSON字符串转换为数组.JSON字符串作为参数传递给bash脚本(它不存在于文件中).
有没有办法在不使用临时文件的情况下实现它?
与此类似:
script.sh
#! /bin/bash
json_data='{"key":"value"}'
jq '.key' $json_data
jq: error: Could not open file {key:value}: No such file or directory
Run Code Online (Sandbox Code Playgroud)
jq1*_*727 37
jq '.key' <<< "$json_data"
Run Code Online (Sandbox Code Playgroud)
pea*_*eak 11
原始问题中给出的变量"json_data"的值不是有效的JSON,因此该响应仍然涵盖两种情况(几乎有效且有效的JSON).
如果"$ json_data"确实包含有效的JSON值,那么这里有两个在本页其他地方没有提到的替代方案.
--argjson例如:
jq -n --argjson data "$json_data" '$data.key'
Run Code Online (Sandbox Code Playgroud)
env如果shell变量不是环境变量:
json_data="$json_data" jq -n 'env.json_data | fromjson.key'
Run Code Online (Sandbox Code Playgroud)
如果$ json_data确实作为JSON 无效但作为jq表达式有效,那么您可以采用以下脚本所示的策略:
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
Run Code Online (Sandbox Code Playgroud)
如果你想使用内联命令,我在我的 Mac 上发现了这个工作:
echo '{"key":"value"}' | jq .key
Run Code Online (Sandbox Code Playgroud)
绝对地。只需告诉 bash给它一个文件。
jq '.key' <(echo "$json_data")
Run Code Online (Sandbox Code Playgroud)
并确保你在 bash 中运行它,而不是 sh。
小智 5
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14920 次 |
| 最近记录: |