代码之家  ›  专栏  ›  技术社区  ›  MrJonesIsMe

无法分析从Instagram API返回的user_media对象

  •  0
  • MrJonesIsMe  · 技术社区  · 7 年前

    我正在从Instagram API获取最近用户媒体的列表。我正在取回数据,但由于某种原因,我无法用常规方法解析对象。

    这是进行API调用并返回对象的方法:

    function getRecent(user_id, access_token, count) {
      request
        .get(`https://api.instagram.com/v1/users/${user_id}/media/recent/?access_token=${access_token}&count=${count}`, function(err, response, body) {
          if (err) {
            console.log('subscriptions.js 47 error: ' + err)
          }
          console.log('subscriptions.js 49 response.statusCode = ' + response.statusCode)
          console.log('subscriptions.js 50 body = ' + body)
        })
    }
    

    对于body,最后一个控制台日志返回:

    subscriptions.js 50 body = {"pagination": {}, 
        "data": [{"id": "1638720960483714658_6291666599", 
           "user": {"id": "6291666599", 
           "full_name": "metoo", 
           "profile_picture": "https://..." etc.}
    

    但如果我登录 body.data body["data"] 每个返回未定义

    这对我来说毫无意义。为什么我无法以正常方式访问对象?

    谢谢你的帮助。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Jake    7 年前

    自从 body 是一根绳子,你必须 JSON.parse 获取实际对象:

    function getRecent(user_id, access_token, count) {
      request
        .get(`https://api.instagram.com/v1/users/${user_id}/media/recent/?access_token=${access_token}&count=${count}`, function(err, response, body) {
          if (err) {
            console.log('subscriptions.js 47 error: ' + err)
          }
          console.log('subscriptions.js 49 response.statusCode = ' + response.statusCode)
          console.log('subscriptions.js 50 body = ' + body)
    
          const json = JSON.parse(body)
          console.log('Yay! An actual object:', json)
          console.log('And its .data:', json.data)
        })
    }
    

    if you call it with json: true :

    function getRecent(user_id, access_token, count) {
      request
        .get({
          url: `https://api.instagram.com/v1/users/${user_id}/media/recent/?access_token=${access_token}&count=${count}`,
          json: true
        }, function(err, response, body) {
          // here body should be an object already
        })
    }
    
        2
  •  0
  •   Jeril Sebastian    7 年前

    根据Instagram API docs , /media/recent/ 返回JSON响应。

    JSON.parse(body)