Search code examples
jsonobjectcoffeescripthubotgiphy

HUBOT Coffescript - JSON obejct


Wondering if anyone can help me with this - pretty much novice in scripting and not sure if I'm doing it right. I need to get an object from this JSON string and it keeps giving me "undefined" error.

Here's the JSON:

    `
    { data:
    [ { type: 'gif',
        id: 'Cmr1OMJ2FN0B2',
        slug: 'hello-Cmr1OMJ2FN0B2',
        url: 'https://giphy.com/gifs/hello-Cmr1OMJ2FN0B2',
        bitly_gif_url: 'https://gph.is/2bZufS7',
        bitly_url: 'https://gph.is/2bZufS7',
        embed_url: 'https://giphy.com/embed/Cmr1OMJ2FN0B2',
        username: '',
        source: 'https://www.fanpop.com/clubs/penguins-of-madagascar/images/37800672/title/hello-photo',
        rating: 'g',
        content_url: '',
        source_tld: 'www.fanpop.com',
        source_post_url: 'https://www.fanpop.com/clubs/penguins-of-madagascar/images/37800672/title/hello-photo',
        is_indexable: 0,
        import_datetime: '2016-09-05 13:48:36',
        trending_datetime: '2017-09-19 14:26:18',
        images: [Object],
        title: 'bom dia hello GIF' } ],
    pagination: { total_count: 2516, count: 1, offset: 0 },
    meta:
    { status: 200,
        msg: 'OK',
        response_id: '5a28576867382f644dc7d33b' } }
    `

And here's my HUBOT script:

    `
    robot.hear /^(no)$|^.*(\sno\s).*$/i, (res) ->
            api_url = 'https://api.giphy.com'
            path = '/v1/gifs/search'
            url = "#{api_url}#{path}"
            robot.http(url)
                .query
                    q: "nono+penguin"
                    rating: 'g'
                    limit: 1
                    fmt: 'json'
                .header('api_key', giphyAuthToken)
                .header('Content-Type', 'application/json')
                .get() (err, res, body) ->
                    # error checking code here 
                    if err
                        console.log err
                    else
                        data = JSON.parse(body)
                        console.log data #this prints above data
                        console.log "success....got giphy response"
                        console.log data.images.original.url #This is giving error that original is undefined   
                        process.exit(1)
    `

Wondering how can I access this "images" object from Giphy's response.

Thanks


Solution

  • The data field in your object is an Array so you need to put the index in order to access the content, i.e.

    data = JSON.parse(body)
    console.log data[0].images