简体   繁体   中英

How do I parse JSON from a URL for an AWS Lambda

I'm writing an AWS Lambda in node.js 6.10 for a school project with Amazon's Alexa software, and I don't have much experience with Javascript and none with JSON. My school has a transportation API for finding if it is up at: https://prtstatus.wvu.edu/api/[TENDIGITTIMESTAMP]/?format=json

If I go there with the stamp, I get "{"status":"7","message":"The PRT is closed.","timestamp":"1494028926","stations":[],"bussesDispatched":"0","duration":[]}"

What I am trying to get is the message and relay it to something else (I've got that part covered). What I don't know is how to break up the JSON response from the URL or write a request in the first place. Can someone help me figure out what to write to use the "message" string in my project?

So far I have:

'getPRTStatus': function() {
    var date = Math.round(new Date().getTime()/1000);
    //this is the spot where I need help filling in
    //var object = JSON.parse('http://prtstatus.wvu.edu/api/'+date+'/?format=json');
    this.attributes.speechOutput = this.t(object.message);
    this.attributes.repromptSpeech = this.t(object.message);
    this.emit(':ask', this.attributes.speechOutput, this.attributes.repromptSpeech);
},

Thanks for your help!

Is it possible for you to post the JSON response here from the URL because that would help a lot to narrow down the issue.

Update

You need to make an http get request to the API endpoint. You won't get a JSON response with,

var url = "http://prtstatus.wvu.edu/api/"+date+"/?format=json"

You can use a package like https://www.npmjs.com/package/request Check out their documentation on how you can make it work.

Something like this,

var options = {
        "method": "get",
        "url": "http://prtstatus.wvu.edu/api/1501906657/?format=json",
    }

request(options, function(err, response, body) {
        if (err) {
           console.log(err)
        } else {
           console.log(body);
        }

Another Update

You can try something like,

var request = require('request'); //Import the NPM package
var object; //global variable to be used later on to store the response

Then in your function,

'getPRTStatus': function() {
      var date = Math.round(new Date().getTime()/1000);
      var options = { 
          'method' : 'get',
          'url' : 'http://prtstatus.wvu.edu/api/' + date + '/?format=json'
       };

       request(options, function(err, response, body){
           if(err) {
              console.log(err);
           }
           else {
              object = JSON.parse(body); //You got the response parsed & stored in the global variable named object 
           }

        });

       this.attributes.speechOutput = this.t(object.message);
       this.attributes.repromptSpeech = this.t(object.message);
       this.emit(':ask', this.attributes.speechOutput, 
       this.attributes.repromptSpeech);
}

Just updated my answer according to your question. Hope that helps. For any future API related issues, you should try Postman in chrome. I'll post a link on how to get started with that. You will also get the direct code of your API call in postman. Link to postman app: https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?utm_source=gmail

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM