使用jq迭代json数据

时间:2016-11-01 11:57:00

标签: json bash jq

我有一些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

1 个答案:

答案 0 :(得分:1)

这样的事情会起作用:

$ 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...")[],这可能更直观。

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