2016-04-23 3 views
1

Я получаю массив JSON с помощью AJAX:Анализировать JSON массив в массив и использовать значение ключа

{ 
    "success": 1, 
    "message": { 
     "ar": { 
      "total": 747.4851, 
      "list": [{ 
       "total_statements": 1, 
       "total_due": 747.4851, 
       "name": "Paul McBilling", 
       "connection_id": 154 
      }] 
     }, 
     "ap": { 
      "total": 0, 
      "list": [] 
     }, 
     "graphs": { 
      "graph": { 
       "2016-01": 13, 
       "2016-02": 0, 
       "2016-03": 0, 
       "2016-04": 747.4851, 
       "2016-05": 0, 
       "2016-06": 0, 
       "2016-07": 0, 
       "2016-08": 0, 
       "2016-09": 0, 
       "2016-10": 0, 
       "2016-11": 0, 
       "2016-12": 0 
      } 
     }, 
     "cached": 1 
    } 
} 

И результат я хотел бы получить обратно будет выглядеть примерно так (в консоли):

2016-01: 13 
2016-02: 0 
... 

И я пытаюсь зарегистрировать каждую пару ключей и значений внутреннего массива «graph».

Я попытался это:

$(data.message.graphs.graph).each(function(key, value){ 
    console.log(key +' and '+ value); 
}); 

Но что это возвращает только один раз:

0 and [object Object] 
+0

Я думаю, что вы Sh ould использует каждую функцию по одному для вложенных элементов, чтобы получить массив «graph» в паре значений ключа. – Aparna

ответ

3

Вы должны использовать jQuery.each() для итерация объекта

var data = { 
 
    "success": 1, 
 
    "message": { 
 
    "ar": { 
 
     "total": 747.4851, 
 
     "list": [{ 
 
     "total_statements": 1, 
 
     "total_due": 747.4851, 
 
     "name": "Paul McBilling", 
 
     "connection_id": 154 
 
     }] 
 
    }, 
 
    "ap": { 
 
     "total": 0, 
 
     "list": [] 
 
    }, 
 
    "graphs": { 
 
     "graph": { 
 
     "2016-01": 13, 
 
     "2016-02": 0, 
 
     "2016-03": 0, 
 
     "2016-04": 747.4851, 
 
     "2016-05": 0, 
 
     "2016-06": 0, 
 
     "2016-07": 0, 
 
     "2016-08": 0, 
 
     "2016-09": 0, 
 
     "2016-10": 0, 
 
     "2016-11": 0, 
 
     "2016-12": 0 
 
     } 
 
    }, 
 
    "cached": 1 
 
    } 
 
} 
 

 
$.each(data.message.graphs.graph,function(key, value) { 
 
    console.log(key + ' and ' + value); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


Или в чистом JavaScript с использованием Object.keys(), чтобы получить массив ключей и forEach() для итерации.

var data = { 
 
    "success": 1, 
 
    "message": { 
 
    "ar": { 
 
     "total": 747.4851, 
 
     "list": [{ 
 
     "total_statements": 1, 
 
     "total_due": 747.4851, 
 
     "name": "Paul McBilling", 
 
     "connection_id": 154 
 
     }] 
 
    }, 
 
    "ap": { 
 
     "total": 0, 
 
     "list": [] 
 
    }, 
 
    "graphs": { 
 
     "graph": { 
 
     "2016-01": 13, 
 
     "2016-02": 0, 
 
     "2016-03": 0, 
 
     "2016-04": 747.4851, 
 
     "2016-05": 0, 
 
     "2016-06": 0, 
 
     "2016-07": 0, 
 
     "2016-08": 0, 
 
     "2016-09": 0, 
 
     "2016-10": 0, 
 
     "2016-11": 0, 
 
     "2016-12": 0 
 
     } 
 
    }, 
 
    "cached": 1 
 
    } 
 
} 
 

 
Object.keys(data.message.graphs.graph).forEach(function(k) { 
 
    console.log(k + ' and ' + data.message.graphs.graph[k]); 
 
});


Или даже вы можете использовать for...in петля

var data = { 
 
    "success": 1, 
 
    "message": { 
 
    "ar": { 
 
     "total": 747.4851, 
 
     "list": [{ 
 
     "total_statements": 1, 
 
     "total_due": 747.4851, 
 
     "name": "Paul McBilling", 
 
     "connection_id": 154 
 
     }] 
 
    }, 
 
    "ap": { 
 
     "total": 0, 
 
     "list": [] 
 
    }, 
 
    "graphs": { 
 
     "graph": { 
 
     "2016-01": 13, 
 
     "2016-02": 0, 
 
     "2016-03": 0, 
 
     "2016-04": 747.4851, 
 
     "2016-05": 0, 
 
     "2016-06": 0, 
 
     "2016-07": 0, 
 
     "2016-08": 0, 
 
     "2016-09": 0, 
 
     "2016-10": 0, 
 
     "2016-11": 0, 
 
     "2016-12": 0 
 
     } 
 
    }, 
 
    "cached": 1 
 
    } 
 
} 
 
for (var k in data.message.graphs.graph) { 
 
    if (data.message.graphs.graph.hasOwnProperty(k)) { 
 
    console.log(k + ' and ' + data.message.graphs.graph[k]); 
 
    } 
 
}

+0

Спасибо, Пранав! Это было быстро :) – Frank

+0

@Frank: рад помочь –

2

Вы можете использовать яваскрипт for как следующее.

var data = { 
 
    "success": 1, 
 
    "message": { 
 
    "ar": { 
 
     "total": 747.4851, 
 
     "list": [{ 
 
     "total_statements": 1, 
 
     "total_due": 747.4851, 
 
     "name": "Paul McBilling", 
 
     "connection_id": 154 
 
     }] 
 
    }, 
 
    "ap": { 
 
     "total": 0, 
 
     "list": [] 
 
    }, 
 
    "graphs": { 
 
     "graph": { 
 
     "2016-01": 13, 
 
     "2016-02": 0, 
 
     "2016-03": 0, 
 
     "2016-04": 747.4851, 
 
     "2016-05": 0, 
 
     "2016-06": 0, 
 
     "2016-07": 0, 
 
     "2016-08": 0, 
 
     "2016-09": 0, 
 
     "2016-10": 0, 
 
     "2016-11": 0, 
 
     "2016-12": 0 
 
     } 
 
    }, 
 
    "cached": 1 
 
    } 
 
} 
 

 
var graph = data.message.graphs.graph; 
 
for (var key in graph) { 
 
    console.log(key + ' and ' + graph[key]); 
 
}

Смежные вопросы