我想在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
在原问题中提供的变量“json_data”的值不是有效的JSON,因此此响应仍覆盖了两种情况(几乎有效和有效的JSON)。
如果“$json_data”包含有效的JSON值,则此处有两个其他页面未提到的替代方法。
--argjson
例如:
jq -n --argjson data "$json_data" '$data.key'
env
如果Shell变量还不是环境变量:
json_data="$json_data" jq -n 'env.json_data | fromjson.key'
如果 $json_data 确实作为 JSON 是无效的,但作为 jq 表达式是有效的,则您可以采用以下记录所示的策略:
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
jq -n $json_data
。如此简单,但是文档和在线示例对于这样简单的情况非常不清晰。它们似乎都假定您想做一些复杂的事情。 - Mike B使用bash命令:echo "$json_data" | jq '.key'
echo '{"key":"value"}' | jq .key
jsonData="{"key":"value"}" result=$(echo $jsonData | jq -r '.key')
echo $result 将输出 value 作为结果。 - Gaurav Dalal#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
.sh
的文件中进行此操作,以下是我使用的方法:local json_data $(getJiraIssue "$1") # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'` # pass that JSON var to jq
只需做
$ jq '.key' <<< $'{"key":"value"}'
"value"
<<<
无法使用。 - bfontaine
jq -s '.[0] * .[1]' file1 file2
呢? - Katiejq '.key' <<< "$json_data" | 其他操作
。 - jq170727echo "$json_data" | jq '.key'
。 - Alex