如何使用查询结果作为属性从输入中选择?



给定输入{ "type": "dropdown"},我想将类型转换为select,基于以下类型映射,可能在jq中做到这一点?由于

{
"radiogroup": "radio",
"checkbox": "checkbox",
"dropdown": "select",
"text": "text",
"rating": "rate",
"boolean": "switch",
"comment": "textarea"
}

PS:查看https://jqplay.org/s/BQo197AF7Q查看使用查找表方法的演示。

先将查找对象赋值给一个变量:

{ "radiogroup": "radio", "checkbox": "checkbox", "dropdown": "select", "text": "text", "rating": "rate", "boolean": "switch", "comment": "textarea" }
as $lookup | $lookup[.type]

如果inputmap对象都在单独的文件中,我们可以使用Botje的解决方案的替代方案,即使用-s(slurp)选项将两个对象读入单个数组。


那么我们可以

jq -s '.[1].type = .[0][.[1].type] | last' map input
  • .type(第二个索引)更改为第一个索引的映射值
    .[1].type = .[0][.[1].type]
  • 只输出第二个对象
    | last

这将产生

{
"type": "select"
}

本地机器的示例:

$ jq . map
{
"radiogroup": "radio",
"checkbox": "checkbox",
"dropdown": "select",
"text": "text",
"rating": "rate",
"boolean": "switch",
"comment": "textarea"
}
$ jq . input
{
"type": "dropdown"
}
$
$ jq -s '.[1].type = .[0][.[1].type] | last' map input
{
"type": "select"
}
$

最新更新