【发布时间】:2021-10-14 02:47:15
【问题描述】:
我正在尝试显示 API 返回的响应。我能够显示整个 API 响应,但无法显示对象的特定字段。
使用的API是:https://lichess.org/api/user/nihalsarin2004
回复是:
{
"id": "nihalsarin2004",
"username": "nihalsarin2004",
"online": false,
"perfs": {
"chess960": {
"games": 107,
"rating": 2574,
"rd": 102,
"prog": 79
},
"antichess": {
"games": 158,
"rating": 1923,
"rd": 109,
"prog": -37
},
"atomic": {
"games": 4434,
"rating": 2381,
"rd": 63,
"prog": -20
},
"racingKings": {
"games": 78,
"rating": 1962,
"rd": 110,
"prog": 48,
"prov": true
},
"ultraBullet": {
"games": 14270,
"rating": 2415,
"rd": 45,
"prog": -8
},
"blitz": {
"games": 917,
"rating": 2912,
"rd": 68,
"prog": 35
},
.
.
.
.
"puzzle": {
"games": 436,
"rating": 2429,
"rd": 97,
"prog": 0
},
"classical": {
"games": 0,
"rating": 1500,
"rd": 500,
"prog": 0,
"prov": true
},
"rapid": {
"games": 0,
"rating": 1500,
"rd": 500,
"prog": 0,
"prov": true
},
"storm": {
"runs": 68,
"score": 109
},
"racer": {
"runs": 3,
"score": 129
},
"streak": {
"runs": 1,
"score": 4
}
},
"createdAt": 1505668328682,
"profile": {
"country": "IN",
"firstName": "Nihal",
"lastName": "Sarin"
},
"seenAt": 1628540487222,
"patron": true,
"playTime": {
"total": 2527288,
"tv": 1064938
},
"language": "en-US",
.
.
.
.
"followable": true,
"following": false,
"blocking": false,
"followsYou": false
}
您也可以在上面给出的链接上查看完整的 API 响应。
我正在从 API 获取数据,尽管我可以通过以下方式访问上述响应的 username:
async function lichessProfile(username) {
await fetch(`https://lichess.org/api/user/${username}`)
.then((res)=>res.json())
.then((json) => setData(json));
}
然后像这样访问username:
let username = JSON.stringify(data.username);
并在我的反应组件中使用它:
<div>
<br/>
Name : {username}
<br/>
</div>
但如果我想在闪电战中访问评级,我正在使用这个并收到错误:
let blitzRating = JSON.stringify(data.perfs.blitz.rating);
有人知道这里有什么问题吗?
【问题讨论】:
-
使用解析?这很有趣。
-
数据在通过 API 发送给您之前已被字符串化,只需解析数据,因此它被视为可访问的对象。试试这个,让 ParsedData = JSON.parse(data);然后console.log(ParsedData.perfs.blitz);
-
也使用问号,这样可以避免在对象不存在时出现错误,如下所示:let blitzRating = JSON.stringify(data?.perfs?.blitz?.rating);
-
顺便说一下,blitz 不在 perfs 中,所以让 blitzRating = JSON.stringify(data?.blitz?.rating);
-
@blanknamefornow 我正在使用它,但仍然出现错误 let pr = data.perfs;让 blitzData = pr.blitz;让 blitzRating = JSON.stringify(blitzData.rating);我将它用作组件中的 {blitzRating}
标签: javascript node.js reactjs api