从维基百科api的JSON响应中提取URL

时间:2017-10-08 09:41:00

标签: javascript jquery json ajax wikipedia-api

我需要从JSON响应中提取图像的URL(也许我可以将它放在变量中)。

我看了this page on the MediaWiki API help

我按照此示例获取有关图片的信息:

https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100

返回此JSON:

{
"batchcomplete": "",
"query": {
    "pages": {
        "2061": {
            "pageid": 2061,
            "ns": 0,
            "title": "Albert Einstein",
            "thumbnail": {
                "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Albert_Einstein_Head.jpg/75px-Albert_Einstein_Head.jpg",
                "width": 75,
                "height": 100
            },
            "pageimage": "Albert_Einstein_Head.jpg"
        }
    }
}

我可以通过哪种方式提取图片的网址?

我试过了:

$.ajax({
    type:"get",
    url:"https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100&format=json",
    dataType:"jsonp",
    contentType:"application/json; charset=utf-8",
    success: function(data) {
        var urlImage = data.query.pages.2061.thumbnail.source;
        var stgurl = JSON.stringify(urlImage);
        alert(stg);
    }
})

但不起作用。

3 个答案:

答案 0 :(得分:-1)

是的,它不起作用,因为这个网址:https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100并不返回JSON而是HTML。如果您需要JSON表示,则需要将&format=json附加到您的网址。

答案 1 :(得分:-1)

data.query.pages.2061.thumbnail.source更改为data.query.pages["2061"].thumbnail.source,因为您无法以点表示法使用数字。

还有警报;将stg更改为stgurl

$.ajax({
    type:"get",
    url:"https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100&format=json",
    dataType:"jsonp",
    contentType:"application/json; charset=utf-8",
    success: function(data) {
        var urlImage = data.query.pages["2061"].thumbnail.source;
        //var stgurl = JSON.stringify(urlImage); - unnecessary JSON.stringify
        var stgurl = urlImage;
        alert(stgurl);
    }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:-1)

我试着在这篇文章中使用解决方案:

iterating through json object javascript

以这种方式使用递归:

function walk(obj) {
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      var val = obj[key];
      console.log(val);
      walk(val);
    }
  }
}
walk(obj);
它似乎有效。