Разбор Json с javascript с за цикл - PullRequest
0 голосов
/ 17 января 2020

Я новичок в javascript и собираюсь сделать a для каждой l oop в приведенной ниже строке JSON. Я пытаюсь провести l oop через каждый элемент результата и посмотреть, если имя = 'Код ошибки'. Я пробовал несколько разных вариантов, и приведенный ниже фрагмент кажется правильным, но я не могу отобразить его в консоли.

            $.ajax({
                 url:'url',
                 dataType: 'json',
                 success: function (data) {
                      //handle the json response

                     for(let i = 0, l = data.results.length; i < l; i++) {

                         if (data.results.variable[i] == 'Error Code'){
                             console.log(data.results.value[i]);
                         }

                        }
                },

            });

    {
  "Count": 136,
  "Message": "Results returned successfully.",
  "SearchCriteria": "VIN:xxxxxxx",
  "Results": [
    {
      "Value": "",
      "ValueId": "",
      "Variable": "Suggested VIN",
      "VariableId": 142
    },
    {
      "Value": "0",
      "ValueId": "0",
      "Variable": "Error Code",
      "VariableId": 143
    },
    {
      "Value": "",
      "ValueId": "",
      "Variable": "Possible Values",
      "VariableId": 144
    },
    {
      "Value": null,
      "ValueId": "",
      "Variable": "Additional Error Text",
      "VariableId": 156
    }
  ]
}

Ответы [ 4 ]

2 голосов
/ 17 января 2020

У вас есть некоторые ошибки в представленном вами коде:

  1. Ваши данные имеют Results, Variable и Value (и другие свойства также), все они с первая буква в верхнем регистре, и в вашем коде вы пытаетесь получить к нему доступ в нижнем регистре (например: data.results), поэтому он не определен (Javascript является регистрозависимым языком), он должен быть data.Results.

  2. Кроме того, вы просматриваете Results, а не Variable, поэтому [i] идет после Results, например: data.Results[i].Variable

см. Ниже

var data = {
  "Count": 136,
  "Message": "Results returned successfully.",
  "SearchCriteria": "VIN:xxxxxxx",
  "Results": [{
      "Value": "",
      "ValueId": "",
      "Variable": "Suggested VIN",
      "VariableId": 142
    },
    {
      "Value": "0",
      "ValueId": "0",
      "Variable": "Error Code",
      "VariableId": 143
    },
    {
      "Value": "",
      "ValueId": "",
      "Variable": "Possible Values",
      "VariableId": 144
    },
    {
      "Value": null,
      "ValueId": "",
      "Variable": "Additional Error Text",
      "VariableId": 156
    }
  ]
}


for (let i = 0; i < data.Results.length; i++) {
  if (data.Results[i].Variable == 'Error Code') {
    console.log(data.Results[i].Value);
  }
}
1 голос
/ 17 января 2020

Во-первых, обратите внимание, что JS чувствителен к регистру. Это означает, что data.results не совпадает с data.Results и вызовет проблемы.

Что касается вашего вопроса, вам не нужно явно указывать здесь l oop. Предполагая, что есть только один объект, содержащий строку Error Code, тогда вы можете использовать метод find(), чтобы получить его:

var error = data.Results.find(o => o.Variable === 'Error Code');

var data = {
  "Count": 136,
  "Message": "Results returned successfully.",
  "SearchCriteria": "VIN:xxxxxxx",
  "Results": [{
      "Value": "",
      "ValueId": "",
      "Variable": "Suggested VIN",
      "VariableId": 142
    },
    {
      "Value": "0",
      "ValueId": "0",
      "Variable": "Error Code",
      "VariableId": 143
    },
    {
      "Value": "",
      "ValueId": "",
      "Variable": "Possible Values",
      "VariableId": 144
    },
    {
      "Value": null,
      "ValueId": "",
      "Variable": "Additional Error Text",
      "VariableId": 156
    }
  ]
}

var error = data.Results.find(o => o.Variable === 'Error Code');
console.log(error);

Если может быть несколько элементов с одинаковым значением Variable, вы можете использовать filter() вместо:

var errors = data.Results.filter(o => o.Variable === 'Error Code');

Просто запомните в в этом случае errors будет содержать массив, и вам нужно будет получить к нему доступ как таковой.

1 голос
/ 17 января 2020

Надеюсь, это поможет

 var data = {
  "Count": 136,
  "Message": "Results returned successfully.",
  "SearchCriteria": "VIN:xxxxxxx",
  "Results": [
    {
      "Value": "",
      "ValueId": "",
      "Variable": "Suggested VIN",
      "VariableId": 142
    },
    {
      "Value": "0",
      "ValueId": "0",
      "Variable": "Error Code",
      "VariableId": 143
    },
    {
      "Value": "",
      "ValueId": "",
      "Variable": "Possible Values",
      "VariableId": 144
    },
    {
      "Value": null,
      "ValueId": "",
      "Variable": "Additional Error Text",
      "VariableId": 156
    }
  ]
}
data.Results.forEach(item => {
if(item.Variable === 'Error Code') console.log(item);
});
0 голосов
/ 17 января 2020

По простой л oop

for(var i=0; i < data.Results.length;i++)
{
  if(data.Results[i].Variable == "Error Code")
  {
    console.log(data.Results[i].Value)  
    console.log(data.Results[i].ValueId)  
    console.log(data.Results[i].Variable)  
    console.log(data.Results[i].VariableId)  
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...