我怎么能循环这个(JSON)

时间:2010-07-30 07:44:15

标签: javascript json object loops

{

    "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 - >所有内部全职,兼职 - >所有兼职等等

4 个答案:

答案 0 :(得分:0)

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]);
    }
}

答案 1 :(得分:0)

假设你安装了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++){...}

的“常规”方式

答案 2 :(得分:0)

您可以使用递归函数执行此操作。但是你需要注意循环引用。见下面的例子:

  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;

答案 3 :(得分:0)

首先,您可以在http://www.jsonlint.com/中验证您的JSON数据。

如果尚未将带有JSON的字符串转换为对象,则应使用Web浏览器中的JSON.parse函数或http://www.json.org/js.html将输入字符串转换为对象。

要循环访问对象的属性,可以使用"for in"循环。通常始终建议以下列形式使用此循环:

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

(例如,参见http://www.jslint.com/lint.html#forin解释)。您不应忘记在name语句内或之前的某个地方声明var namefor。如果你忘了这个,变量将被解释为全局,你的代码将运行缓慢。

使用标准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]);
}