簡體   English   中英

無法使用JavaScript解析JSON

[英]Unable to parse json using javascript

我有一個JSON,我正在嘗試使用JavaScript進行解析。 迭代計數和附加的頁面將是動態的。

預期結果

迭代

就像上面的圖片一樣,我能夠從下面提到的json中獲取動態迭代鍵。

Iteration.json

{
    "count":[
    {
    "iteration1":[
    {
    "PageName":"T01_Launch"
    },
    {
    "PageName":"T02_Login"
    }
    ]
    },
    {
    "iteration2":[
    {
    "PageName":"T01_Launch"
    },
    {
    "PageName":"T02_Login"
    }
    ]
    }
    ]
}

當我單擊迭代時,它必須為該特定迭代填充相應的頁面名稱,如預期結果圖像所示。 但是我得到的實際上是(請參考下圖):

迭代2

請找到我嘗試的代碼:

     var pagenamearray = [];

$.getJSON("iteration.json", function(json) {
    var hits = json.count;

    var iterations, tnname, iteration;

    for (var k in hits) {
        var value;
        if (hits.hasOwnProperty(k)) {
            value = hits[k];
            var iteratearray = [];

            for (var j in value) {

                if (value.hasOwnProperty(j)) {

                    j;

                    var check = value[j];

                    for (var i in check) {

                        if (check.hasOwnProperty(i)) {

                            var test = check[i];

                            for (var t in test) {

                                if (test.hasOwnProperty(t)) {


                                    var pagename = JSON.stringify(t)


                                    var arr = []
                                    if (pagename.includes("PageName")) {


                                        //alert("Key is " +pagename + ", value is" + JSON.stringify(test[t]));

                                        for (var it = 0; it < hits.length; it++) {

                                            if ((Object.keys(hits[it])).includes(j)) {
                                                var pagenamevalue = test[t];
                                                arr[it] = [];
                                                arr.push(pagenamevalue);
                                            }

                                        }
                                    }
                                    //alert(arr)

                                }
                                pagenamearray.push(arr);

                            }
                        }

                    }

                }

                var row = document.createElement('div');
                row.setAttribute("class", "row");
                row.setAttribute("id", j)

                var gridWidth = document.createElement('div');
                gridWidth.setAttribute("class", "col-lg-12");

                var panelRoot = document.createElement('div');
                panelRoot.setAttribute("class", "panel panel-default");

                var panelHeading = document.createElement('div');
                panelHeading.setAttribute("class", "panel-heading");

                var heading3 = document.createElement('a');
                heading3.setAttribute("class", "panel-title");

                var icon = document.createElement('i');
                icon.setAttribute("class", "fa fa-long-arrow-right fa-fw");

                heading3.appendChild(icon);
                heading3.innerHTML = j;
                heading3.setAttribute("onclick", "doit('" + j + "');");

                panelHeading.appendChild(heading3);
                /*        var panelBody=document.createElement('div');
                        panelBody.setAttribute("class","panel-body");
                        panelBody.setAttribute("id","panellinks");*/

                panelRoot.appendChild(panelHeading);
                //     panelRoot.appendChild(panelBody)
                gridWidth.appendChild(panelRoot);
                row.appendChild(gridWidth);
                document.getElementById("analysis").appendChild(row);




            }


        }


    }

});

function doit(value) {
    var ul = document.getElementById(value);
    if (ul != undefined) {
        $("#" + "expandlinks").remove();
        $("#" + value + value).remove();
    }

    var accordion = document.getElementById(value);

    var panelBody = document.createElement('div');

    panelBody.setAttribute("class", "panel-body");
    panelBody.setAttribute("id", "expandlinks")

    var tablediv = document.createElement('div')
    var tablelink = document.createElement('a');
    tablediv.appendChild(tablelink);
    var graphdiv = document.createElement('div')
    var graphlink = document.createElement('a');
    graphdiv.appendChild(graphlink);
    var recommndiv = document.createElement('div');
    var recommendlink = document.createElement('a');
    recommndiv.appendChild(recommendlink)

    //alert(pagenamearray.length)
    tablelink.innerHTML = pagenamearray;
    /*graphlink.innerHTML="Timeline View";
    recommendlink.innerHTML="Recommendations";*/
    panelBody.appendChild(tablediv);

    panelBody.appendChild(recommndiv);
    panelBody.appendChild(graphdiv);
    accordion.appendChild(panelBody);


}

任何有關如何實現這一目標的建議都會有很大幫助。 提前致謝。

我認為問題是如何將pagenamearray分配給tablelink.innerHTML 這會將數組轉換為字符串,還將數組中的所有元素也轉換為字符串,並用逗號將它們分開。 但是,您的pagenamearray包含一些空數組。 它們將在處理過程中轉換為空字符串,但在它們之前和之后仍然會有逗號。

在上面的示例代碼中, pagenamearray將以[[[],"T01_Launch"],[[],"T02_Login"],[null,[],"T01_Launch"],[null,[],"T02_Login"]] -轉換為字符串時,將導致",T01_Launch,,T02_Login,,,T01_Launch,,,T02_Login" 因此,與其直接將其分配給innerHTML值,不如將其過濾掉空數組和null值。

暫無
暫無

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

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