千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:长沙千锋IT培训  >  技术要点  >  千锋长沙前端培训分享之JavaScript中循环遍历JSON响应

千锋长沙前端培训分享之JavaScript中循环遍历JSON响应

来源:千锋教育
发布人:千锋长沙
时间: 2022-01-04 16:31:45

       我们在前端开发过程中,通过服务器获取数据的时候服务器返回的数据通常为JSON格式,今天小千就来教大家如何利用JavaScript解析服务器的响应获取我们想要的数据。该过程通常包括两个步骤:将数据解码为本机结构(例如数组或对象),然后使用JavaScript的内置方法遍历该数据结构。

src=http___www.iswweb.com_uploads_image_2015_20151125185514_88208.jpg&refer=http___www.iswweb

       什么是JSON?JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。(画外音:JSON之父叫做Douglas Crockford,尽管他在社区里不算那么讨喜,不过也无法否认他对JavaScript所作的贡献,著名的开源项目JSlint也是他写的,他还有出版一本书叫How JavaScript Works,中文译名《JavaScript语言精粹》)

       数据可以通过两种方式存储在JSON中:名称/值对的集合(又名JSON对象)、值的有序列表(又名JSON数组)。从Web服务器接收数据时,数据始终是字符串,这意味着将其转换为可以使用的数据结构是必要工作,如果您想了解有关JSON如何工作的更多信息,可以访问JSON网站。从远程API获取接口:

1. 使用XMLHttpRequest API

const xhr = new XMLHttpRequest();

xhr.onreadystatechange = () => {

if (xhr.readyState === XMLHttpRequest.DONE) {

console.log(typeof xhr.responseText);

console.log(xhr.responseText);

}

};

xhr.open('GET', 'https://www.easy-mock.com', true);

xhr.setRequestHeader('Accept', 'application/json');

xhr.send(null);

返回的数据为:

// string

// {"id":"helloworld","joke":"today is Friday!","status":200}

服务器返回了一个字符串。我们需要先将其解析为JavaScript对象,然后才能遍历其属性。我们可以使用JSON.parse()做到这一点,如下显示:

if (xhr.readyState === XMLHttpRequest.DONE) {

const res = JSON.parse(xhr.responseText);

console.log(res);

};

//Object { id: "helloworld", joke: "today is Friday!", status: 200 }

2. 使用Fetch API

尽管上面使用XMLHttpRequest对象的方法效果很好,但在复杂的场景下它就会变得非常笨拙。下面我们使用浏览器新提供的api,它是window对象上定义的方法fetch,你可以使用该方法执行请求。此方法返回一个Promise,可用于检索请求的响应。

(async () => {

const res = await fetch('https://icanhazdadjoke.com/', {

headers: { Accept: 'application/json' },

});

const json = await res.json();

Object.entries(json).forEach(([key, value]) => {

console.log(`${key}: ${value}`);

});

})();

// id : helloworld

// joke : today is Friday

// status : 200

Fetch API返回响应流。这不是JSON,因此JSON.parse()需要尝试使用它的response.json()函数而不是对其进行调用。这将返回一个Promise,该Promise会将响应的正文文本解析为JSON的结果进行解析。

三、 多种方式遍历数据

1. 使用for...in

const res = JSON.parse(xhr.responseText);

for (const key in res){

if(obj.hasOwnProperty(key)){

console.log(`${key} : ${res[key]}`)

}

}

// id : helloworld

// joke : today is Friday

// status : 200

2. 使用Object.entries,Object.values或Object.entries

const res = JSON.parse(xhr.responseText);

Object.entries(res).forEach((entry) => {

const [key, value] = entry;

console.log(`${key}: ${value}`);

});

// id : helloworld

// joke : today is Friday

// status : 200

3. 处理数组

值的有序列表(也称为数组)也是有效的JSON,让我们研究如何处理此类响应。

对于这个示例,我们将使用GitHub的REST API来获取用户存储库的列表:

(async () => {

async function getRepos(username) {

const url = `https://api.github.com/users/${username}/repos`;

const response = await fetch(url);

const repositories = await response.json();

return repositories;

}

const repos = await getRepos('sylove');

console.log(repos);

})();

// Array(30) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, … ]

如您所见,API返回了一个对象数组。要访问每个单独的对象,我们可以使用常规forEach方法:

repos.forEach((repo) => {

console.log(`${repo.name} has ${repo.stargazers_count} stars`);

});

// CQ has 0 stars

// VM99:14 Food has 1 stars

// VM99:14 vue-blog-generater has 0 stars

// VM99:14 YouDe has 0 stars

// ...

另外,您当然可以使用上面讨论的任何方法来遍历对象的所有属性,并将它们记录到控制台:

repos.forEach((repo) => {

Object.entries(repo).forEach(([key, value]) => {

console.log(`${key}: ${value}`);

});

});

// id: 187614270

// VM104:15 node_id: MDEwOlJlcG9zaXRvcnkxODc2MTQyNzA=

// VM104:15 name: CQ

// ...

       在这篇文章中,我们研究了什么是JSON。我已经演示了如何将服务器的JSON响应解析为本机数据结构(例如数组或对象),以及如何遍历这种结构以访问其中包含的数据。我们大部分web服务与服务器的交互都是围绕这个这个展开,希望这篇文章对您有所帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>