将结果转换为常量



承认我是一个开发的新手

我正在编写我的第一个应用程序,不关注/添加到现有代码中。

我想从一个api中设置一个常量,字段是totalGames

用于引用的Urlhttp://statsapi.mlb.com/api/v1/schedule/games/?sportId=1

字段是第4行

在nodejs中,我可以用这个来控制台我想要的结果

const request = require('postman-request')
const MLBStatsAPI = require('mlb-stats-api')
const { response } = require('express')
const mlbStats = new MLBStatsAPI()
const url = 'http://statsapi.mlb.com/api/v1/schedule/games/?sportId=1'
request ({url:url}, (error,response) => {
const todaygames = JSON.parse(response.body)
console.log(todaygames.totalGames)
})

我想保留这个结果(在今天的示例中:14(作为我可以使用的值。

我认为你应该能够更改

consttodygames=JSON.parse(response.body(

consttodygame=JSON.parse(response.body.totalGames(

console.log(todaygames(

并得到我想要的结果,但它带着回来了

undefined:1
undefined
^
SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at Request._callback (/Users/jamescpower/BaseballApp/src/app.js:30:29)

您可以将结果解构为所需的变量,假设对象类似于:

{
totalGames: 10,
someOtherField: {
data: 'more-data',
foo: 'bar',
},
}
request ({url:url}, (error,response) => {
const { totalGames } = JSON.parse(response.body)
console.log(totalGames)
})

最简单的解决方案:

const res = JSON.parse(response.body)
const todaysgames = res.totalgames

为什么您的解决方案不起作用:

假设有一个对象const obj = {name: 'foo'}。这里我们可以通过obj.name得到值foo,因为obj是一个对象
此处reponse.body是一个字符串。不能只将mystringvariable.name转换为字符串,要做到这一点,必须将response.body解析为对象。JSON.parse正在做这项工作。

当你

const todaygames = JSON.parse(response.body)
console.log(todaygames.totalGames)

它之所以有效,是因为response.body被解析为对象,然后您访问它的totalgames

当你

const todaygames = JSON.parse(response.body.totalGames)
console.log(todaygames)

它不起作用,因为response.body没有被解析,它只是一个字符串。您必须首先对其进行解析才能访问其属性
为了使事情正常进行,首先您需要将其解析为字符串,然后访问

根据单据

json-将body设置为值的json表示,并添加内容类型:application/json头。此外,将响应体解析为JSON。

所以如果你这样做,它应该像你期望的一样工作

const url = 'http://statsapi.mlb.com/api/v1/schedule/games/?sportId=1';
request({ url, json: true }, (error, response) => {
if (!error && response.statusCode == 200) {
const { totalGames } = response.body;
console.log(totalGames);
}
});

最新更新