jQuery遍历json递归

时间:2015-03-09 18:38:37

标签: javascript jquery json recursion

我试图用jQuery递归遍历一个JSON对象..通常它可以工作,但不是在下面的JSON上。

我想遍历这个JSON,在这里我上传了一张图片:

enter image description here

对于我的json对象,我有这个jquery函数:

 var construct_id = "#ecommerce_form_";

 // function to traverse json objects given back from Serializer class
 function process(callback, id) {
   var key;
   for (key in callback) {

    // Handle the arrays
    if ('length' in callback[key]) {

        // Handle the end - we found a string
        if (typeof callback[key][0] == "string") {
            var field_id = construct_id + id + key;
            var err_msg = callback[key][0];

            $(field_id).tooltip('destroy');
            $(field_id).tooltip({'title': err_msg});
            $(field_id).closest('div[class="form-group"]').addClass('has-error');

            console.log(field_id, ":", err_msg);
        }
        // Else we found something else, so recurse.
        else {
            var i = 0;
            while (i < callback[key].length) {
                process(callback[key][i], key + "_" + i + "_");
                i++;
            }
        }
    }

    // Handle the objects by recursing.
    else {
        process(callback[key], key + "_");
    }
   }
 }

但是在尝试构建联系人时,这些功能失败了。使用错误消息解决id:

  

&#34;未捕获的TypeError:无法在&#39;中使用&#39;运营商搜索&#39;长度&#39;   in此值不应为空。&#34;

希望你们可以帮助我增强jQuery功能,它不是100%成功的,你可以在这个json示例中看到。

此致

2 个答案:

答案 0 :(得分:1)

您正在尝试搜索该物业&#34;长度&#34;在一个字符串中,无法完成。在错误的迭代中:callback = obj.contacts.addresses,key = cities,然后回调[key] [0] =&#34;此值不应为空白&#34;。
你应该做的是检查你是否在之前找到字符串&#34;长度&#34;属性,只有在没有找到字符串的情况下,才开始递归检查 在这里看到jsfiddle示例: http://jsfiddle.net/38d15z4o/

 var construct_id = "#ecommerce_form_";

// function to traverse json objects given back from Serializer class
function process(callback, id) {
   var key;
   for (key in callback) {
   // Handle the end - we found a string
   if (typeof callback[key] == "string") {
        var field_id = construct_id + id + key;
        var err_msg = callback[key][0];
        $(field_id).tooltip('destroy');
        $(field_id).tooltip({'title': err_msg});
        $(field_id).closest('div[class="form-group"]').addClass('has-error');

        console.log(field_id, ":", err_msg);
   }
    // Handle the objects and arrays by recursing.
    else {
        process(callback[key], id + key + "_");
    }
   }
 }

注意:对于错误消息,您只显示字符串的第一个字母,我认为您打算放置:err_msg = callback [key]而不是err_msg = callback [key] [0]。

答案 1 :(得分:0)

为什么不检查

typeof callback[key] === 'array'

而是检查长度属性?