【问题标题】:Get all entries with their respective keys using jq [duplicate]使用 jq [重复] 获取所有条目及其各自的键
【发布时间】:2018-11-06 07:19:43
【问题描述】:

我要处理的 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 所述),但解析它并没有成功。
感谢您的帮助

【问题讨论】:

    标签: json bash jq


    【解决方案1】:

    您可以使用paths 函数获取每个标量值的路径,然后使用getpath 检索路径所指向的值。 $p 记录路径供以后使用。

    $ 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"
    

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


    更详细地展示两个关键步骤的工作原理:

    $ jq -cr 'paths(scalars)' tmp.json
    ["data1"]
    ["data2"]
    ["key1","data3"]
    ["key1","data4"]
    ["key2","data5"]
    $ jq -r 'paths(scalars) | join("_")' tmp.json
    data1
    data2
    key1_data3
    key1_data4
    key2_data5
    

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多