我有一个json文件。
{
"cars":
[
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
{ "name":"BMW", "models":[ "320", "X3", "X5" ] },
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}
我需要输入其中一个模型,并希望将相应的汽车名称作为输出。
希望通过jq实现。请帮忙。
答案 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>