使用jq在数组Json中选择值

时间:2018-06-22 22:51:26

标签: arrays json jq

我有一个json文件。

{
"cars": 
[
    { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
    { "name":"BMW", "models":[ "320", "X3", "X5" ] },
    { "name":"Fiat", "models":[ "500", "Panda" ] }
]
}

我需要输入其中一个模型,并希望将相应的汽车名称作为输出。

希望通过jq实现。请帮忙。

3 个答案:

答案 0 :(得分:0)

在文件cars.jq中使用此过滤器:

.cars[]
| select(.models|index($model))
| .name

和您在cars.json中的JSON,调用:

jq --arg model Panda -f cars.jq cars.json

产量:

"Fiat"

当然,还有许多其他方法可以将模型名称传递给jq程序。

单线:

jq --arg model Panda '.cars[] | select(.models|index($model)) | .name' cars.json

答案 1 :(得分:-1)

您可以执行以下操作:

语法jq '.keyName<array/single value>'

cat file.json | jq '.cars[]' // retunts array of cars
cat file.json | jq '.cars[].name' // retunts list of names
cat file.json | jq '.cars[].models[]' // retunts array of car models

答案 2 :(得分:-1)

我不知道您为什么要要求jq。在普通的Javascript中,解决方案非常简单。我不知道这是否是最有效的方法,但我建议您使用一种简单易懂的普通香草解决方案。除非效率成为问题,否则可以找到足够有效的解决方案。在这里,我在函数调用中对模型“ Focus”进行了硬编码,并返回了名称“ Ford”。

<html>
    <head>
        <script>
            function getNameOfModel(model) {
                var nameOfModel = "Unknown";
                var jsonData = {"cars": [
                    { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
                    { "name":"BMW", "models":[ "320", "X3", "X5" ] },
                    { "name":"Fiat", "models":[ "500", "Panda" ] }
                    ]};
                var jsonArray = jsonData["cars"];
                var i = 0;
                while (i < jsonArray.length) {
                    if (jsonArray[i]["models"].includes(model)) {
                        nameOfModel = jsonArray[i]["name"];
                        i = jsonArray.length;
                    }
                    i++;
                }
                document.getElementById("carName").innerHTML = nameOfModel;
            }            
        </script>
    </head>
    <body>
        <div><p id="carName"></p></div>
        <script>getNameOfModel("Focus");</script>
    </body>
</html>