遍历 JSON 对象 [重复]

Posted

技术标签:

【中文标题】遍历 JSON 对象 [重复]【英文标题】:Iterating over a JSON-Object [duplicate] 【发布时间】:2013-08-25 11:17:54 【问题描述】:

我有以下 JSON 文件:

"Mensaplan": [
        "Montag": [
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": true, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false
        ],

        "Dienstag": [
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": true,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false
        ],

        "Mittwoch": [
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": true, "bio": false,
            "food": "Schnitzl", "price": "4.00 €", "vegetarian": false, "bio": true
        ],

        "Donnerstag": [
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false
        ],

        "Freitag": [
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false,
            "food": "Schnitzl", "price": "5.00 €", "vegetarian": false, "bio": false
        ]
    ]

我想遍历“Mensaplan”并获得每一天(“Montag”、“Dienstag”、[...](它是德语))。我试图用 jQuery 方法 $.each 来做到这一点,但我不知道如何为这些日子制定通配符,因为每个通配符都有不同的名称。

谁能帮我解决这个问题?

提前致谢!

【问题讨论】:

这里不需要 jQuery,一个普通的 for 和/或 for-in 循环就足够了。 Schnitzl gnam var sting='("'+Object.keys(json).join('","')+'")'有原型。 【参考方案1】:

不需要 jQuery,一个简单的for...in 循环就可以了。

var obj = JSON.parse(yourJsonString);

//for each object in the "Mensaplan" array
for(var i = 0; i < obj.Mensaplan.length; ++i) 

    //for each key in the object
    for(var key in obj.Mensaplan[i]) 

        var day = obj.Mensaplan[i][key];

        //here key is the day's name, and day is the data...

    


希望这会有所帮助。

【讨论】:

这里需要使用hasOwnProperty @Orlando 你不需要需要使用hasOwnProperty,只有当一个库与对象原型混淆(如果他们这样做你应该知道它)你会需要使用hasOwnProperty。自 2010 年以来,如果有人在弄乱 Object 原型,他们应该使用 Object.defineProperty 并标记为 enumerable: false 你是对的,你不必在这里使用它,但总是使用它是一个好习惯,问题是当你迭代从其他人继承的对象时 @Orlando 我不同意,你应该明白什么时候应该使用它,并适当地使用它。我不认为最好的做法是把它扔到每个循环中,即使它不需要在那里。 @chad 2 件事.. 1. 这是一个很好的做法,如果你不想使用它也没关系.. (developer.mozilla.org/en-US/docs/Web/javascript/Reference/…),如果你使用 jslint,它会报告一个 if缺少检查自己的属性。【参考方案2】:

首先使用JSON解析它

var json = JSON.parse(jsonString)

then 只是一个 javascript 对象.. 你应该使用..

Object.keys(json).forEach(function (key) 
    json[key];  
);

如果您使用for in,您需要检查该对象是否具有该属性并且不是其父对象之一 (if (json.hasOwnProperty) //code here )

使用 Object.keys 你不需要这样做,因为只获取对象拥有的键。

【讨论】:

取决于所需的浏览器支持,这可能很危险。 @chad.. 它的 ie9+ 兼容,并且两个函数都有 polyfills。 为什么要循环? var days=Object.keys(json) @cocco 如果你想访问你需要循环的值.. 认为他需要字符串...对。【参考方案3】:
var mensaplan = json['Mensaplan'];
for (key in mensaplan) 
     values = mensaplan[key];
     //do something with the values

【讨论】:

【参考方案4】:

这里不需要jquery,一个简单的for in就足够了,但是你必须检查hasOwnProperty函数,因为for in循环也可以检索对象的方法。

for (var key in Mensaplan) 
    if (Mensaplan.hasOwnProperty(key) 
        console.log(Mensaplan[key]);
    

更新:在你的情况下 Mensaplan 是一个包含在 json 中的数组...对于数组,最快的方法是标准 for 循环,而不是 for in

for (var i = 0, length = Mensaplan.length; i < length; i++) 
    console.log(Mensaplan[i]);

【讨论】:

以上是关于遍历 JSON 对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历这个json对象(不使用jquery)[重复]

如何使用打字稿(Angular2)循环遍历JSON对象[重复]

访问 JSON 数组中的对象 (JavaScript) [重复]

将JSON格式的字符串转换为Java中的JSON对象[重复]

如何遍历 json 对象? [复制]

如何循环 JSON 数据以获取所有对象的打印百分比值,使用 for each 或 other [重复]