簡體   English   中英

jQuery遍歷JSON遞歸

[英]jQuery traverse json recursive

我正在嘗試使用jQuery遞歸遍歷JSON對象。通常它可以正常工作,但不能在以下JSON上使用。

我想遍歷此JSON,在這里我上傳了一張圖片:

在此處輸入圖片說明

對於我的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時,該功能將失敗:

“未捕獲的TypeError:無法在其中使用'in'運算符搜索'length'。該值不能為空。”

希望你們能幫助我增強jQuery功能,但並非如本json示例中所示100%成功。

問候

您試圖在字符串中搜索屬性“ length”,但無法完成。 在錯誤的迭代中:callback = obj.contacts.addresses,key = city,然后callback [key] [0] =“此值不應為空”。
您應該做的是查找“ length”屬性之前檢查是否已到達字符串,然后只有在未找到字符串的情況下,才開始進行遞歸檢查。
參見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]。

你為什么不檢查

typeof callback[key] === 'array'

而是檢查length屬性?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM