现在,我已经完成了以下工作:
for row in $(echo "${values}" | jq -r '.[]'); do
-jq() {
echo ${row} | jq -r ${1}
}
echo $(_jq '.samplekey')
done
在这里,我无法弄清楚如何在不传递确切键名的情况下提取键。请帮帮我,谢谢!
答案 0 :(得分:1)
bash
+ jq
解决方案:
假设您的 JSON 数据已保存到data.json
文件:
IFS=$'\t'; while read -r k v; do
export "$k=\"$v\""
done < <(jq -r '.data | to_entries[] | [(.key|ascii_upcase), .value] | @tsv' data.json)
结果:
$ echo "$HELLO1"
"world1"
echo "$SAMPLEKEY"
"samplevalue"
答案 1 :(得分:0)
我尝试使用实用程序<% unless request.fullpath=='/' %>
<%= render partial: "partials/header" %>
<% end %>
来提取数据部分中的键列表。这里我假设文件名是sed
,其中包含原始json数据。
/tmp/data.json
输出
sed -r -n '/"data"/,/}/{/[{}]/d;s/^[[:space:]]*"([^"]+)":.*/\U\1/g;p}' /tmp/data.json
HELLO1
SAMPLEKEY
和"data"
,只需使用sed提取其中的行列表; }
表示删除包含标点/[{}]/d
或{
; }
设置为一行中的字段分隔符,从:
中提取目标字符,使用:
覆盖所有字符。如果你想\U
他们(导出密钥= val),也许你可以尝试
export
whihin sed -r -n '/"data"/,/}/{/[{}]/d;s/^[[:space:]]*"([^"]+)":[[:space:]]*"([^"]+)".*$/\1|\2/g;p}' /tmp/data.json | while IFS="|" read -r item val;do item="${item^^}"; item="${val}"; export "${item}"; echo ${item}; done
循环。