【问题标题】:Select value in array Json using jq使用 jq 在数组 Json 中选择值
【发布时间】:2018-06-22 22:51:25
【问题描述】:

我有一个 json 文件。

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

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

用jq,我想实现。请帮忙。

【问题讨论】:

    标签: arrays json jq


    【解决方案1】:

    在文件 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
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      语法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
      

      【讨论】:

      • 上述查询给出了整个汽车的名称或型号。但我需要获取给定模型输入的特定汽车名称
      • 我觉得 JQ 没有那么先进,我通常使用 bash 脚本将 json 加载到数组中,并将其作为对象对其运行查询。
      【解决方案3】:

      我不知道您为什么要请求 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>

      【讨论】:

      • 我正在编写使用 jq 的 bash 脚本。所以尝试使用 jq 本身而不是使用 Javascript
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2022-07-11
      相关资源
      最近更新 更多