Перебирайте вложенный объект JSON, чтобы найти идентификатор значения - PullRequest
0 голосов
/ 29 ноября 2018
    "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"
            }
        }
    }
}

Я хочу пройтись по этому вложенному объекту json, войдя в объект фасета и сказать, если атрибут имени равен «KC Content Kind ID», а затем вернуть идентификатор для соответствующего атрибута имени

после получения моего вызова API с почтальоном я пытался получить соответствующий идентификатор «KC Content Kind 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>');
        }
    });

Ответы [ 4 ]

0 голосов
/ 29 ноября 2018

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);
0 голосов
/ 29 ноября 2018

Я думаю, что самый простой способ добиться этого - использовать функцию Object.values в сочетании с Array.prototype.filter.Затем вы можете взять первый элемент из массива, возвращенного методом filter (поскольку каждый идентификатор должен быть уникальным), и отобразить его идентификатор.

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);
0 голосов
/ 29 ноября 2018

вы можете использовать Object.keys и find

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);
0 голосов
/ 29 ноября 2018

Просто проанализируйте строку и выполните простой цикл.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...