读钥匙壳

时间:2018-01-25 05:47:12

标签: json shell jq

现在,我已经完成了以下工作:

for row in $(echo "${values}" | jq -r '.[]'); do
    -jq() {
        echo ${row} | jq -r ${1}
    }
    echo $(_jq '.samplekey')
done

在这里,我无法弄清楚如何在不传递确切键名的情况下提取键。请帮帮我,谢谢!

2 个答案:

答案 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

解释

  1. json数据的分隔符为HELLO1 SAMPLEKEY "data",只需使用sed提取其中的行列表;
  2. }表示删除包含标点/[{}]/d{;
  3. 的行
  4. }设置为一行中的字段分隔符,从:中提取目标字符,使用:覆盖所有字符。
  5. PS

    如果你想\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 循环。