使用非标准键名访问JSON对象

时间:2015-04-10 09:55:42

标签: javascript json mediawiki

MediaWiki API返回JSON,其键名如" 3314"和" *"。当我尝试以正常方式访问它们时,这些抛出错误。

var ob = {
    "query": {
        "normalized": [
            {
                "from": "DE:OpenStreetMap_License",
                "to": "DE:OpenStreetMap License"
            }
        ],
        "pages": {
            "3314": {
                "pageid": 3314,
                "ns": 200,
                "title": "DE:OpenStreetMap License",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "{{Languages|OpenStreetMap_License}}\n\nSiehe '''[http://www.openstreetmap.org/copyright www.openstreetmap.org/copyright]'''.\n\n[[Category:License]]"
                    }
                ]
            }
        }
    }
};

在那里你看到了问题:名为3314和*。

的键

我的第一个方法是使用

$("#b").val(ob.query.pages.3314.revisions[0].*);

这当然会引发错误。

我现在正在使用

// this works with jquery, but is ugly
$.each(ob.query.pages, function(p, pageobject) {
    $("#a").text(p);
    $.each(pageobject.revisions[0], function(k,v) {
        if (k == "*") {
            $("#b").text(v);
        }
    });
});

但这不能成为访问名为" *"的单个怪物的正确方法。

请参阅小提琴:http://jsfiddle.net/x5znr1jv/2/

1 个答案:

答案 0 :(得分:2)

使用

$("#a").val(ob.query.pages['3314'].revisions[0]['*']);