使用 jq 迭代 json 数据

using jq to iterate json data

我有一些 json 输入数据 我想将变量值提取到可以粘贴到脚本中的内容中

输入样本:

{
  "menu": {
    "props": [{
      "name": "foo1",
      "model": "bar1"
    }, {
      "name": "foo2",
      "model": "bar2"
    }, {
      "name": "foo3",
      "model": "bar3"
    }, {
      "name": "foo4",
      "model": "bar4"
    }, {
      "name": "foo5",
      "model": "bar5"
    }]
  }
}

期望输出:

AddMenuItem(menu, "bar1", "foo1");
AddMenuItem(menu, "bar2", "foo2");
AddMenuItem(menu, "bar3", "foo3");
...etc

像这样的东西会起作用:

$ jq -r '.menu.props[] | "AddMenuItem(menu, \"\(.model)\", \"\(.name)\")"' file.txt
AddMenuItem(menu, "bar1", "foo1")
AddMenuItem(menu, "bar2", "foo2")
AddMenuItem(menu, "bar3", "foo3")
AddMenuItem(menu, "bar4", "foo4")
AddMenuItem(menu, "bar5", "foo5")

-r 打印原始输出(未 JSON 编码)。

[] 展开 props 数组并为所述数组中的每个元素打印字符串 "AddMenu..."

也可以使用 ...props | map("AddMenu...")[],这可能更直观。

\(...) 启用 () 之间的字符串插值。