使用jq获取所有条目及其各自的键

时间:2018-05-27 15:40:45

标签: json bash jq

我想要处理的JSON结构如下:

{
 "data1": "some data",
 "data2": "some data",
   "key1": {
     "data3": "some data",
     "data4": "some data"
   },
   "key2": {
     "data5": "some data"
   }
}

我希望jq输出(为了使用eval提取和设置变量):

data1="some data"
data2="some data"
key1_data3="some data"
key1_data4="some data"
key2_data5="some data"

我已尝试使用类似to_entries的内容来获取.key.value(如here所述),但我没有太多成功解析它。
谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

您可以使用Point函数获取每个标量值的路径,然后使用paths来检索路径所导致的值。 getpath记录路径供以后使用。

$p

(根据https://github.com/stedolan/jq/issues/78上的信息回答。)

显示两个关键步骤如何更详细地工作:

$ jq -r 'paths(scalars) as $p | "\($p|join("_"))=\"\(getpath($p))\""' tmp.json
data1="some data"
data2="some data"
key1_data3="some data"
key1_data4="some data"
key2_data5="some data"