javascript - 如何引用从api返回的json中的字段?
问题描述
我需要通过api下载两个值,在网页的header中使用。
api调用有效并返回一个json,格式有效。
我试过 var tvotes = jsonstr.totvotes;
和 var tvotes = jsonstr ["totvotes"]; 但得到未定义的错误
我究竟做错了什么?- 如何引用 jsonstr 中的字段?
提前致谢
迈克尔
这是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<script>
var request = new XMLHttpRequest();
request.open('GET', 'https://au2mailer.com/api/a2m-getreviews.asp?apikey={{API_KEY}}');
request.send();
request.onload = ()=>{
var jsonstr = request.response;
document.write(jsonstr);
document.write(jsonstr.totvotes);
}
</script>
</head>
<body>
</body>
</html>
解决方案
首先,您在这里请求的 api 很奇怪。它不会将 json 作为纯字符串返回,而是返回包含 json 字符串的 html 文本。
了解之后,就可以使用DOMParser轻松读取其中的 html 文本并提取正文内容。然后你得到了 json 字符串。之后,您仍然需要将 json 字符串解析为实际对象,否则您将尝试获取字符串的属性。要解析字符串,您可以使用JSON.parse。
我更新了你的问题以适应这个:
<!DOCTYPE html>
<html lang="en">
<head>
<script>
var request = new XMLHttpRequest();
request.open('GET', 'https://au2mailer.com/api/a2m-getreviews.asp?apikey={{apikey}}');
request.send();
request.onload = ()=>{
var receivedDom = new DOMParser().parseFromString(request.response, "text/html");
var jsonstr = receivedDom.body.innerText;
var parsedstr = JSON.parse(jsonstr);
document.write(parsedstr.totvotes);
}
</script>
</head>
<body>
</body>
</html>
我还看到您正在使用 XMLHttpRequest。它仍然有效,但实际上并不那么方便。我会使用现代方式来使用Fetch API。
一个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<script>
const url = "https://au2mailer.com/api/a2m-getreviews.asp?apikey={{apikey}}";
fetch(url)
.then(response => response.text())
.then(text => {
let receivedDom = new DOMParser().parseFromString(text, "text/html");
let jsonStr = receivedDom.body.innerText;
document.write(jsonStr);
let parsedObj = JSON.parse(jsonStr);
document.write(parsedObj.totvotes)
});
</script>
</head>
<body>
</body>
</html>
推荐阅读
- php - 如何从 GitHub 在 laravel 中添加 SDK?
- python-ldap - 安装python ldap包时出错
- javascript - 如何在另一个函数完成读取输入的每个字母后终止 setInterval 函数?
- javascript - 如何使用 DOM 元素的文本内容来引用命名导入?
- react-native - react native 如何在模态中并排使用两个项目?
- html - HTML/CSS:如何在此动画文本中的最后一个字母之后停止光标?
- python-3.x - 跨 gridspec 子图/轴共享 xlabel(部分行)
- multithreading - 为什么线程从 jmeter 测试中掉线?
- javascript - Angular 11 - 无法读取未定义的属性“示例”
- javascript - 视频完成时在 Hooktube 中检测?