使用jtc(或shell)从json构建键/值对,其中元素1是键,元素2是值

kse8i1jr  于 2023-10-21  发布在  Shell
关注(0)|答案(1)|浏览(123)

在这个json

[
   {"name" : "Steve", "id" : "25"},
   {"name" : "Joe",   "id" : "36"}

]

如何使用jtc(或其他shell工具)来获得这样的输出?(或输出适合处理得到这个)

Steve : 25
Joe : 26

我可以用基本的jtc -w'<name>'提取给定元素的值,但是当我试图构建它时,我无处可去。

tf7tbtn2

tf7tbtn21#

我的第一个想法是:

# with json string as variable named 'my_json'

paste -d ' ' <(echo ${my_json} |jq -r '.[].name' | awk '{print $1":"}') <(echo ${my_json} | jq -r '.[].id')
# with data store in json file named 'my.json'

paste -d ' ' <(jq -r '.[].name' <my.json | awk '{print $1":"}') <(jq -r '.[].id' <my.json)
  • 这些命令提取键,然后用:乘以awk追加,并用给定的json追加其余的值。
  • append方法由paste命令完成,分隔符= ``(不是默认的\t

结果:

Steve: 25
Joe: 36

也许会有一个更优雅的纯jq解决方案。

注意

1.安装jq:检查here
1.如果你想调整冒号:周围的空格,请更改awk

paste -d ' ' <(jq -r '.[].name' <my.json | awk '{print $1"  :  "}') <(jq -r '.[].id' <my.json)

# result
Steve  :   25
Joe  :   36
  1. \t选项卡中的paste,不带冒号:
paste <(jq -r '.[].name' <my.json) <(jq -r '.[].id' <my.json)

# result
Steve   25
Joe     36

相关问题