Цикл по данным JSON - PullRequest
       2

Цикл по данным JSON

2 голосов
/ 15 ноября 2011

У меня есть данные JSON, возвращаемые JQuery -

[["001","Item1","2011-03-15","2011-06-15"],["001","Item2","2011-07-15","2011-11-15"]]

Как получить каждое значение "001", "Item1" ...

Ответы [ 8 ]

5 голосов
/ 15 ноября 2011
var json = [["001","Item1","2011-03-15","2011-06-15"],["001","Item2","2011-07-15","2011-11-15"]];
$.each(json, function(key1, item) {
  $.each(item, function(key2, itemvalues) {
    var test = itemvalues;
  });
});
2 голосов
/ 15 ноября 2011
var json_data = [["001","Item1","2011-03-15","2011-06-15"],["001","Item2","2011-07-15","2011-11-15"]];
var json_length = json_data.length;
var inner_length = 0;

for (var i = 0; i<json_length; i++)
{
    inner_length = json_data[i].length;
    for( var j = 0; j<inner_length; j++ ){
        alert(json_data[i][j]);
    }
}

Я заметил, что на самом деле это не объект JSON, а структура массива. Таким образом, у нас просто есть 2 для цикла, чтобы получить все значения. Приведенный выше код должен отображать все значения, которые вы имеете в этих массивах.

Кроме того, вы всегда должны определять длину массива где-то вне циклов for. Делает для лучшего кода и более быстрого выполнения, потому что вы не вызываете метод length каждый раз.

РЕДАКТИРОВАТЬ: Я просто хотел бы добавить, что использование $ .each может не быть предпочтительным методом в некоторых случаях: http://pure -essence.net / 2011/09/02 / JQuery-каждый-против-JavaScript-для-петли /

Использование нативного JS всегда будет быстрее или, по крайней мере, наравне с jQuery.

0 голосов
/ 15 ноября 2011

В jQuery вы можете сгладить свой массив, используя map :

var data = $.map(your_array_from_json, function(e) { return e; });

После этого data - это одномерный массив, содержащий все элементы в ваших данных, например:

["001","Item1","2011-03-15","2011-06-15","001","Item2","2011-07-15","2011-11-15"]
0 голосов
/ 15 ноября 2011

Это не настоящий JSON.Реальный JSON будет выглядеть так:

[{"key": "value"}, {"key": "value"}]

У вас просто массив.Так что просто итерируйте ДВА цикла для печати. ​​

Но если вы хотите итерировать данные JSON ... выполните следующее:


Если вы используете JAVA, то вам нужно сделатьследующее:
import org.json.JSONArray;

public some_function () {

try {
   String json = "you json string";
   JSONArray jsonArr = new JSONArray (json);
}
catch (org.json.JSONException e) {
}
for (int i=0; i<jsonArray.length();j++)  {
     JSONObject json = new JSONObject(jsonArr.get(i));
     JSONArray names= json.names();
     JSONArray values = json.toJSONArray(names);

     for (int j=0;j<values.length();j++) 
          //print "values";
     }
}

Если вы используете Python, сделайте следующее:

import simplejson as json

json_data = json.loads ("you json string")

for (json in json_data) :
    print json[0]
0 голосов
/ 15 ноября 2011
for ( var i in json ) 
 for ( var j in json[i] ) 
  alert(json[i][j] )
0 голосов
/ 15 ноября 2011
var data = [["001", "Item1","2011-03-15"],["001", "Item2","2011-07-15"]];

for ( var i = 0, data_len = data.length; i < data; i++ ) {
    for ( var j = 0, item_len = data[i].length; j < item_len; j++ ) {
         var item = data[i][j];
         console.log(item);
    }
}
0 голосов
/ 15 ноября 2011

Предположим, что:

    var x = [["001","Item1","2011-03-15","2011-06-15"],["001","Item2","2011-07-15","2011-11-15"]];

Then this:

    alert(x[0][0]);

Оповещает значение "001".

0 голосов
/ 15 ноября 2011

Вы должны проанализировать этот JSON и выполнить итерации элементов массива.

var datas = JSON.parse(yourJSON); // you get an array of arrays
var firstArray = datas[0];        // get the first of them
for(var i = 0, len = firstArray.length; i < len; i += 1) {
    // you access the elements
}

Сделайте то же самое для остальных (в цикле или что-то в этом роде).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...