遍历多维Json

时间:2018-09-03 21:50:28

标签: javascript json

我有一个多层JSon,需要遍历并获取其列名和值。

 var json   {  
       "Students":[  
          {  
             "name":{  
                "value":"Allan"
             },
             "number":{  
                "value":"123"
             }
          },
          {  
             "name":{  
                "value":"Frank"
             },
             "number":{  
                "value":"456"
             }
          }
       ]
    }

我可以遍历并获取列名,但是无法获取值。

var objectKeys = Object.keys(json); 
for (var key in objectKeys)
    {       
        var student = json.Students;

        for (var i = 0; i < student .length; i++) {

            for (var column in json.Students[i])
                {

                window.print(column);
                window.print(column.value);                                         

            }

        }       
}

以上内容为我提供了以下

name
undefined
number
undefined
name
undefined
number
undefined

理想情况下,我想单独对待一行,以便可以将其插入数据库中,例如针对学生表的名称和数字列插入Allan和123。

4 个答案:

答案 0 :(得分:1)

var objectKeys = Object.keys(json);
for (var key in objectKeys)
{       
    var student = json.Students;

    for (var i = 0; i < student .length; i++) {

        for (var column in json.Students[i]) {
            window.print(column);
            window.print(json.Students[i][column].value);

        }

    }
}

由于未使用外部for循环中的key,因此是多余的

答案 1 :(得分:0)

var objectKeys = Object.keys(json); 
for (var key in objectKeys) {       
    var student = json.Students;
    for (var i = 0; i < student .length; i++) {
        window.print(json.Students[i].name.value);
        window.print(json.Students[i].number.value);

    }       
}

答案 2 :(得分:0)

您的JSON对象包含1个条目,其中包含 key 学生和 value ,其中包含2个词典的列表。

所以var objectKeys = Object.keys(json); 代表一个值“学生”

在实例化此变量时似乎并没有使用var key in objectKeys,但是从不使用它。

如果您要遍历字典,请像这样重新编写代码:

 var json   {  
       "Students":[  
          {  
             "name":{  
                "value":"Allan"
             },
             "number":{  
                "value":"123"
             }
          },
          {  
             "name":{  
                "value":"Frank"
             },
             "number":{  
                "value":"456"
             }
          }
       ]
    }

for(let i = 0; i < json["Students"].length; i++){

    let key_values = Object.keys(json["Students"][i]);

    for(let inner_key_values in key_values){
        window.print(json["Students"][i][inner_key_values].value);
    }

}

答案 3 :(得分:0)

我为您编写了以下代码段-它以递归方式打印嵌套对象。您可以根据需要对其进行修改。

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3",
    "p4": {
        "p4": 'value 4'
    }
};



/**
*   Printing a nested javascript object
*/
function jsonPrinter(obj) {

    for (let key in obj) {
        // checking if it's nested
        if (obj.hasOwnProperty(key) && (typeof obj[key] === "object")) {
            jsonPrinter(obj[key])
        } else {
            // printing the flat attributes
            console.log(key + " -> " + obj[key]);
        }
    }
}

jsonPrinter(p);