在JSON中提取嵌套对象的值

时间:2017-12-09 17:51:15

标签: json

更新了问题,相关位置包含完整代码:

var app=express()

app.get('/api/imagesearch/:topic',function(req,res){
    var topic=req.params.topic
    var offset=req.query.offset

    var opts = {
        host: 'www.googleapis.com',
        path: '/myapi'  
        // The result of calling this URL below
        };

    https.get(opts,function(resp){
          resp.pipe(bl(function(err,data){
          if(err) throw err
          // data is a buffer
          var myString=data.toString() // string
          var myData=JSON.parse(data.toString()) // object
          var myArray=myData.items // array

          var result=[]
          myArray.forEach(function(element){
            result.push({"url":element.pagemap.cse_image[0].src,
                         "snippet":element.snippet,
                     "thumbnail":element.pagemap.cse_thumbnail[0].src,
                        "context":element.link})

          })

              res.end(JSON.stringify(result))

    }))

  })

})

调用网址https://www.googleapis.com/myapi

的结果
var myData={"items":[
   {
      "snippet": "string",
      "link": "string",
      "pagemap": {
               "cse_image":[{
                             "src":"value" }],

               "cse_thumbnail":[{
                             "src":"value"}]

              }

    },
    {
      "snippet": "string",
      "link": "string",
      "pagemap": {
               "cse_image":[{
                             "src":"value" }],

               "cse_thumbnail":[{
                             "src":"value"}]

              }

    },...]}

请求是:

https://www.myweb.com/api/imagesearch/cat?offset=1

关键是myArray.forEach(element.snippet,element.link,element.pagemap)中第一个键的调用正确返回所需的数组。 调用嵌套键时的问题:element.pagemap.cse_image,element.pagemap.cse_thumbnail返回TypeError:无法读取属性' cse_image'未定义的

1 个答案:

答案 0 :(得分:0)

您不需要使用JSON.parse()myData已经是JSON对象而不是String。

Array.each()不是标准的JS函数。请改用forEach()。你在使用图书馆吗?

更新:我已为您创建了以下JsFiddle。检查控制台输出。