【问题标题】:Translate JSON into Markdown list with jq使用 jq 将 JSON 转换为 Markdown 列表
【发布时间】:2021-12-03 15:23:48
【问题描述】:

我有一个用于项目和任务的 JSON 结构:

{
  "project1": [
    "task1a",
    "task1b"
  ],
  "project2": [
    "task2a",
    "task2b",
    "task2c"
  ]
}

我想将其转换为类似 MD 的列表:

* project1
  * task1a
  * task1b
* project2
  * task2a
  * task2b
  * task2c

主要使用jqsh/bash

我能做的最好的就是:

jq '. | to_entries | .[] | .value |= "  * "+join("\n  * ")+"\n" | .key = "* "+.key'

但后来我被困在尝试正确打印 .value 字符串和 .key

【问题讨论】:

标签: json shell jq


【解决方案1】:

另一种解决方案,没有更新运算符|=,没有内置的join(),也没有明确的换行符\n

jq -r 'to_entries[] | "* \(.key)", "  * \(.value[])"'
* project1
  * task1a
  * task1b
* project2
  * task2a
  * task2b
  * task2c

Demo

【讨论】:

  • * 都在同一行。 OP wan 是要缩进的任务。
  • @0stone0 在重新编辑时引入了错误。恢复到工作原件。感谢您的注意。
【解决方案2】:

另一种解决方案,使用join() 和字符串插值:

to_entries[] | "* \(.key)\n  * \(.value | join("\n  * "))"

将产生:

* project1
  * task1a
  * task1b
* project2
  * task2a
  * task2b
  * task2c
jq -r 'to_entries[] | "* \(.key)\n  * \(.value | join("\n  * "))"' input
JqPlay Demo

【讨论】:

    【解决方案3】:

    你很亲密。添加-r 以输出原始字符串而不是JSON,并使用| .key, .value 将键和值字符串作为单独的项目输出,以便它们显示在相邻行上。

    jq -r '. | to_entries | .[] | .value |= "  * "+join("\n  * ") | .key = "* "+.key | .key, .value'
    

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 2021-10-21
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多