Как получить значение Json второго уровня

#javascript #jquery #json

#javascript #jquery #json

Вопрос:

Я пытаюсь выполнить итерацию по значениям json второго уровня в ответе.

Это пример Json:

   {

  "Links": {},

 "Items": [

  {

  "WebId": "A0EUfSms148rEStZ8_fh",

  "Name": "AA to Slurry ",

  "Path": "klj",

  "Links": {

    "Source": ""

  },

  "Items": [

    {

      "Timestamp": "2016-08-21T05:14:27.0180053Z",

      "Value": 0.0154830571,

      "UnitsAbbreviation": "%",

      "Good": true,

      "Questionable": false,

      "Substituted": false

    },

    {

      "Timestamp": "2016-08-21T05:14:30Z",

      "Value": 0.0155982981,

      "UnitsAbbreviation": "%",

      "Good": true,

      "Questionable": false,

      "Substituted": false

    },

    {

      "Timestamp": "2016-08-21T05:14:30Z",

      "Value": 0.0155982981,

      "UnitsAbbreviation": "%",

      "Good": true,

      "Questionable": false,

      "Substituted": false

    },

    {

      "Timestamp": "2016-08-21T05:14:33.024002Z",

      "Value": 0.0155704552,

      "UnitsAbbreviation": "%",


  "Items": [

{

  "WebId": "A0EUfSms148rEStZ8_fh",

  "Name": “Slurry ",

  "Path": "klj",

  "Links": {

    "Source": ""

  },

  "Items": [

    {

      "Timestamp": "2016-08-21T05:14:27.0180053Z",

      "Value": 0.0154830571,

      "UnitsAbbreviation": "%",

      "Good": true,

      "Questionable": false,

      "Substituted": false

    },

    {

      "Timestamp": "2016-08-21T05:14:30Z",

      "Value": 0.0155982981,

      "UnitsAbbreviation": "%",

      "Good": true,

      "Questionable": false,

      "Substituted": false

    },

    {

      "Timestamp": "2016-08-21T05:14:30Z",

      "Value": 0.0155982981,

      "UnitsAbbreviation": "%",

      "Good": true,

      "Questionable": false,

      "Substituted": false

    },

    {

      "Timestamp": "2016-08-21T05:14:33.024002Z",

      "Value": 0.0155704552,

      "UnitsAbbreviation": "%",
  

Это код, который у меня есть до сих пор, который возвращает только имя:

   var feat = resp.Items,
        tableData = [];

    // Iterate over the JSON object
    for (var i = 0, len = feat.length; i < len; i  ) {
        tableData.push({
            "name": feat[i].Name,
            "Timestamp": feat[i].Timestamp,
            "value": feat[i].Items.Value,

        });
    }
  

Итак, в этом примере этот пример табличных данных в идеале выглядел бы так:

 name        | Timestamp | value
AA to Slurry  
AA to Slurry
AA to Slurry
AA to Slurry
AA to Slurry
AA to Slurry 
Slurry 
Slurry
Slurry
Slurry
Slurry
Slurry
  

С соответствующей меткой времени и значением из «Элементов» второго уровня. Прямо сейчас все, что я получаю, это значение name как мне получить имя, а затем выполнить итерацию по элементам второго уровня?

Комментарии:

1. У вас есть JSON или у вас есть объект?

2. @adeneo У меня есть JSON.

3. @llerdal Нам нужно точно знать, что у вас есть значение resp . Как вы получили JSON в объект JS и проанализировали его? Аденео говорит, что вы, вероятно, используете объект в JavaScript, а не JSON, который представляет собой файл текстового формата, который вам нужно будет разобрать на JavaScript.

4. Я получаю его, хотя $.getJSON(«websiteJSONCall «, функция (соответственно) { @SpencerWieczorek

Ответ №1:

Я думаю, ваша проблема в том, что к вашему массиву вложенных элементов осуществляется прямой доступ. ( feat[i].Items.Value ) вместо этого вы также должны перебирать 2-й массив. Я собрал этот код, чтобы вы начали, он перебирает элементы в json, которые у вас есть, затем перебирает элементы внутри каждого элемента первого массива.

 json.Items.forEach(function(item){
  item.Items.forEach(function(subItem){
    tableData.push({
      'name':item.Name,
      'timestamp':item.TimeStamp,
      'value':subItem.Value
    });
  });
});