Как я могу зациклить это (JSON) - PullRequest
0 голосов
/ 30 июля 2010
{

    "fulltime": [

        {"name": "oscar godson", "age": "20", "email": "oscargodson@hismail.com"},

        {"name": "daniel erickson", "age": "25", "email": "daniel@wraithtech.com"},

        {"name": "john doe", "age": "18", "email": "john.doe@mycompany.com"}

    ],

    "parttime":[

        {"name": "bill johnson", "age": "35", "email": "billjohnson@gmail.com"}

    ]



}

и не зная ни одного из этих значений, например, полный рабочий день может равняться любому.Я ищу функцию / метод, чтобы пройти через все это ... Пожалуйста, не jQuery.

Кроме того, я хочу в основном получить вывод: fulltime -> all in fulltime, parttime -> all insideнеполный рабочий день и т. д.

Ответы [ 4 ]

0 голосов
/ 30 июля 2010

Прежде всего вы можете проверить свои данные JSON в http://www.jsonlint.com/.

Если вы еще не преобразовали строку с JSON в объект, вам следует использовать функцию JSON.parse из веб-браузера или из http://www.json.org/js.html для преобразования входной строки в объект.

Для циклического просмотра свойств объекта вы можете использовать "for in" loop.Как правило, всегда рекомендуется использовать этот цикл в следующей форме:

for (var name in myObject) {
    if (myObject.hasOwnProperty(name)) {
        // ....
    }
}

(см., Например, http://www.jslint.com/lint.html#forin для объяснения).Не забывайте объявлять name как var name либо внутри оператора for, либо где-то ранее.Если вы забудете об этом, переменная будет интерпретирована как глобальная, и ваш код будет выполняться медленно.

Циклический проход по элементу массива более эффективен при использовании стандартного цикла for вместо цикла "for in"Более того, чтобы получить больше преимуществ в производительности, вы всегда должны кэшировать индекс свойства, используемого более одного раза в локальной переменной.Например, цикл

for (var i = 0; i < your_object[key].length; i++) {
    console.log(your_object[key][i]);
}

лучше переписать следующим образом:

var arr = your_object[key];
var len = arr.length;
for (var i = 0; i < len; i++) {
    console.log(arr[i]);
}
0 голосов
/ 30 июля 2010

Предположим, у вас установлен Firebug:

for(var key in json) {
  //"fulltime", "parttime"
  console.log("Checking " + key);
  for(var i = 0; i < json[key].length; i++){
    var person = json[key][i];
    //Each person
    for(var prop in person) {
      console.log(prop + ": " + person[prop]);
    }
  }
}

Редактировать : будьте осторожны, чтобы не повторять с for ... in ... по массиву. Чтобы перебрать массив, используйте «обычный» способ с for(var i = 0; i < array.length; i++){...}

0 голосов
/ 30 июля 2010

Вы можете сделать это с помощью рекурсивной функции. Но вы должны быть осторожны с циркулярными ссылками. Смотрите пример ниже:

  var arr = [];

  /**
   * Gets the string representation of the specified object. This method is
   * used for debugging
   * @param {Object} Object to convert to string
   * @return {String} The string representation of the object
   */
  var toObjectSource = function(obj)   {
     if(obj === null)   {
        return "[null]";
     }
     if(obj === undefined) {
        return "[undefined]";
     }

     var str = "[";
     var member = null;
     for(var each in obj)   {
        try   {
           member = obj[each];
           if(arr.indexOf(member) === -1) { // the indexOf function is not available
                                            // on older versions of js
              arr.push(member);
              str += each + "=" + toObjectSource(member) + ", "; // but beware of this
                                                                // recursive call!!!
           }
        }catch(err) {
           alert(err);
        }
     }
     return str + "]";
  }

Причина проверки в том, что. Это даст вам «слишком много рекурсии» в случае, если объект похож на:

 var obj = {
    "a": "a",
    "b": "b"
 }
 obj.c = obj;
0 голосов
/ 30 июля 2010
for (key in your_object) {
    console.log(key + " people:");
    // "key" is "fulltime", "parttime", etc
    for (var i = 0; i < your_object[key].length; i++) {
        console.log(your_object[key][i]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...