我有这个从API获取的json。
{
"result": {
"key1": "val1",
"key2": "val2",
"key3": "val3"
}
}
我有以下shell脚本,该脚本在文本文件中为表创建标题。我想从上面的result
对象中提取键值,并将其放在表中KEYS
下和键VALUES
下的相同文本文件中。我是jq和shell的新手,正在努力实现这一目标。
echo "%table"
echo -e "KEYS\tVALUES" > outputfile.txt
KEYVALS=$(curl -uuser:password
"http://localhost:8080/customapi")
# here I want to split the key values using jq and write to the outputfile.txt
cat outputfile.txt
我期望的结果是:
KEYS VALUES
key1 val1
key2 val2
key3 val3
我该如何实现?
答案 0 :(得分:2)
关键是使用.result
将to_entries
转换为键/值对数组,然后以原始模式输出一组字符串(使用字符串插值创建)。
% cat tmp.json
{
"result": {
"key1": "val1",
"key2": "val2",
"key3": "val3"
}
}
% jq -r '{"KEYS": "VALUES"} + .result | to_entries[] | "\(.key)\t\(.value)"' tmp.json
KEYS VALUES
key1 val1
key2 val2
key3 val3
我在转换为键/值列表之前将标头添加到了输入中。
答案 1 :(得分:0)
通过在末尾添加列调用,对齐也适用于更长的值......
请注意使用 @
字符作为标记分隔符...当然,如果您的数据包含它,这将不起作用...
aws cognito-idp list-user-pools --max-results 20 | \
jq -r '.UserPools[]|to_entries[]|select (.key == "Name")|("\(.key):@\(.value)")'| column -t -s'@'
输出
Name: corp_stg_user_pool
Name: corp_dev_user_pool