2017-10-08 67 views
-1

我需要从JSON响应中提取图像的URL(也许我可以把它放在一个变量中)。从维基百科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); 
    } 
}) 

,但不起作用。

+0

你是什么意思的“不工作”?到底是怎么回事?你有没有注意到你在JSON.stringify(urlimage)行中拼写变量'urlImage'? – louisfischer

+0

谢谢,我纠正这一点,但仍然无法正常工作。 – Jeek

回答

-1

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

+0

谢谢,我添加'&format = json',但在变量中似乎没有任何东西。 – Jeek

-1

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

而且还有警报;改变stgstgurl

$.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>

+0

谢谢您的回答,但我的代码无法显示警报。我认为这些页面不是一个数组,但我不知道我可以通过哪种方式访问​​它。 – Jeek

+0

哇!我喜欢反对票,不是吗? :想着 – lshettyl

+0

原谅我,但我不知道它会如何发生,我没有这样做。 – Jeek

-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); 
它似乎工作3210