【问题标题】:Loop through a nested JSON object to find a value id遍历嵌套的 JSON 对象以查找值 id
【发布时间】:2019-05-01 18:19:29
【问题描述】:
    "results": {
    "data": {
        "facets": {
            "60749428": {
                "id": 60749428,
                "name": "KC Content Content Kind"
            },
            "60750276": {
                "id": 60750276,
                "name": "KC Content Product Version"
            },
            "69107204": {
                "id": 69107204,
                "name": "KC Video Audience"
            },
            "69127027": {
                "id": 69127027,
                "name": "KC Content Kind ID"
            }
        }
    }
}

我想通过进入 facet 对象来遍历这个嵌套的 json 对象,并说如果名称属性是“KC Content Kind ID”然后返回对应名称属性的 id

因此,在使用邮递员进行 api 调用后,我试图以这种方式在我的成功函数中获取“KC Content Kind ID”的相应 id,但由于它不是一个数组,我想知道是否每个都可以在 jquery 中工作。

    //Get Available Kinds
function getAvailableKinds() {
    $.ajax({
        url: csexe + "/api/v2/facets/" +getLocationId(),
        dataType: "json",
        type: "GET",
        beforeSend: function(xhr) {
            xhr.setRequestHeader ("OTCSticket", getAuthToken());
        },
        success: function(response) {
            var obj = response.results.data.facets;
            $.each(obj, function(item, value){
                 if ( value == 'KC Content Kind ID') {
                     var idRequired = obj.id;
                 }
            });
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert("An error occurred... Look at the console");
            $("body").html('<p>status code: '+jqXHR.status+'</p><p>Error Thrown: ' + errorThrown + '</p><p>Response Text:</p><div>'+jqXHR.responseText + '</div>');
        }
    });

【问题讨论】:

  • 到目前为止您尝试过什么?向我们展示代码
  • 美好的一天,所以我所做的是在从我的 api 调用中获得邮递员结果之后。这是我在“成功”函数中的代码。

标签: javascript postman


【解决方案1】:

只需解析字符串,然后做一个简单的循环。

var jsonObj = (JSON.parse("your json here")).data.facets;

for (i = 0; i<jsonObj.length;i++)
{
    if(jsonObj[i].name == "KC Content Kind ID")
        return jsobObj[i].id;
}

【讨论】:

    【解决方案2】:

    您可以使用Object.keysfind

    const obj = {"results": {"data": {"facets": {"60749428": {"id": 60749428,"name": "KC Content Content Kind"},"60750276": {"id": 60750276,"name": "KC Content Product Version"},"69107204": {"id": 69107204,"name": "KC Video Audience"},"69127027": {"id": 69127027,"name": "KC Content Kind ID"}}}}};
        
    const facets = obj.results.data.facets;
    const result = Object.keys(facets).find(v => facets[v].name === 'KC Content Kind ID');
    //your object keys are equal to id, you can just return key
    console.log(result);
    
    // if your object keys can be different from id you can do this
    console.log(facets[result].id);

    【讨论】:

      【解决方案3】:

      我认为实现这一点的最简单方法是将Object.values 函数与Array.prototype.filter 结合使用。然后,您可以从 filter 方法返回的数组中获取第一项(因为每个 ID 都应该是唯一的)并显示它的 ID。

      const o = { "results": { "data": { "facets": { "60749428": { "id": 60749428, "name": "KC Content Content Kind" }, "60750276": { "id": 60750276, "name": "KC Content Product Version" }, "69107204": { "id": 69107204, "name": "KC Video Audience" }, "69127027": { "id": 69127027, "name": "KC Content Kind ID"}}}}};
      
      const [a] = Object.values(o.results.data.facets).filter(f => f.name == "KC Content Kind ID");
      
      console.log(a.id);

      【讨论】:

      • 您也可以使用Array.prototype.find 代替Array.prototype.filter - 但它不适用于所有浏览器(Internet Explorer)。
      【解决方案4】:

      var obj = {
        "results": {
          "data": {
            "facets": {
              "60749428": {
                "id": 60749428,
                "name": "KC Content Content Kind"
              },
              "60750276": {
                "id": 60750276,
                "name": "KC Content Product Version"
              },
              "69107204": {
                "id": 69107204,
                "name": "KC Video Audience"
              },
              "69127027": {
                "id": 69127027,
                "name": "KC Content Kind ID"
              }
            }
          }
        }
      };
      let facets = obj.results.data.facets;
      let id; 
      for(let key in facets){
        if(facets[key].name == 'KC Content Kind ID'){
          id = facets[key].id;
          break;
        }
      }
      console.log(id);

      【讨论】:

        猜你喜欢
        • 2017-11-16
        • 2018-05-13
        • 1970-01-01
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 2019-04-24
        相关资源
        最近更新 更多