解析嵌套JSON数组:提取并显示多层级数据

解析嵌套json数组:提取并显示多层级数据

本文旨在解决从嵌套JSON数组中提取数据并有效展示的问题。通过JavaScript代码示例,详细讲解如何使用map()和join()方法处理多层级的JSON结构,从而避免因索引错误导致代码中断。同时,提供完整的代码示例,包括HTML、CSS和JavaScript,方便读者理解和实践,最终实现从JSON数据中提取所需信息并在网页上清晰呈现。

在处理JSON数据时,经常会遇到嵌套的数组结构,例如一个包含多个对象的数组,而每个对象又包含一个包含多个对象的数组。直接使用索引访问这些嵌套数组可能会导致问题,尤其是在数组长度不确定的情况下。本文将介绍如何使用JavaScript有效地处理这类嵌套JSON数据,并提供一个完整的示例,展示如何从一个包含多个文档信息的JSON响应中提取数据并在网页上显示。

处理嵌套数组

假设我们有如下的JSON数据结构,其中results数组包含多个对象,每个对象都有一个agencies数组,该数组包含了多个机构信息:

{  "results": [    {      "title": "Document Title 1",      "type": "Notice",      "abstract": "Document abstract...",      "document_number": "2023-00001",      "html_url": "https://example.com/document1",      "publication_date": "2023-10-26",      "agencies": [        {          "raw_name": "Agency A",          "name": "Agency A Full Name",          "id": 1        },        {          "raw_name": "Agency B",          "name": "Agency B Full Name",          "id": 2        }      ]    },    {      "title": "Document Title 2",      "type": "Rule",      "abstract": "Another document abstract...",      "document_number": "2023-00002",      "html_url": "https://example.com/document2",      "publication_date": "2023-10-27",      "agencies": [        {          "raw_name": "Agency C",          "name": "Agency C Full Name",          "id": 3        }      ]    }  ]}

直接使用索引 myArr.results[i].agencies[0].raw_name 访问 agencies 数组中的第一个机构名称,当某个文档的 agencies 数组只有一个元素时,代码可以正常运行。但是,如果尝试访问 myArr.results[i].agencies[1].raw_name,而该文档的 agencies 数组只有一个元素,则会导致错误,因为索引 1 超出了数组的范围。

为了解决这个问题,我们可以使用 map() 方法遍历 agencies 数组,提取每个机构的 raw_name,然后使用 join() 方法将这些名称连接成一个字符串。

const xmlhttp = new XMLHttpRequest();xmlhttp.onload = function() {  const myArr = JSON.parse(this.responseText);  let text = "";  for (let i in myArr.results) {    // 使用 map() 提取 raw_name 并使用 join(', ') 连接    let agencies = myArr.results[i].agencies.map(a => a.raw_name).join(', ');    text += "

" + myArr.results[i].title + "

" + myArr.results[i].type + "

" + agencies + " Document # " + myArr.results[i].document_number + "

Posted on: " + myArr.results[i].publication_date + "

" + myArr.results[i].abstract + "

AppStruct
AppStruct

无代码应用开发平台

AppStruct 132
查看详情 AppStruct
Read More
"; } text += ""; document.getElementById("demo").innerHTML = text;};xmlhttp.open( "GET", "https://www.federalregister.gov/api/v1/documents.json?conditions%5Bagencies%5D%5B%5D=agriculture-department&conditions%5Bagencies%5D%5B%5D=federal-highway-administration&conditions%5Bagencies%5D%5B%5D=fish-and-wildlife-service&conditions%5Bagencies%5D%5B%5D=forest-service&conditions%5Bagencies%5D%5B%5D=interior-department&conditions%5Bagencies%5D%5B%5D=international-boundary-and-water-commission-united-states-and-mexico&conditions%5Bagencies%5D%5B%5D=land-management-bureau&conditions%5Bagencies%5D%5B%5D=national-highway-traffic-safety-administration&conditions%5Bagencies%5D%5B%5D=national-park-service&conditions%5Bagencies%5D%5B%5D=reclamation-bureau&conditions%5Bagencies%5D%5B%5D=environmental-protection-agency&conditions%5Bagencies%5D%5B%5D=council-on-environmental-quality&conditions%5Bagencies%5D%5B%5D=safety-and-environmental-enforcement-bureau&conditions%5Bagencies%5D%5B%5D=environment-office-energy-department&conditions%5Bcomment_date%5D%5Bgte%5D=05%2F01%2F2023&conditions%5Bcomment_date%5D%5Blte%5D=01%2F01%2F2050&conditions%5Bterm%5D=arizona&conditions%5Btype%5D%5B%5D=RULE&conditions%5Btype%5D%5B%5D=PRORULE&conditions%5Btype%5D%5B%5D=NOTICE", true);xmlhttp.send();

这段代码首先使用 map(a => a.raw_name) 遍历 myArr.results[i].agencies 数组,对于每个机构对象 a,提取其 raw_name 属性。map() 方法返回一个新的数组,其中包含了所有机构的 raw_name。然后,使用 join(‘, ‘) 方法将这个数组中的所有元素连接成一个字符串,每个元素之间用逗号和空格分隔。

完整的HTML, CSS和JavaScript代码示例

以下是完整的HTML、CSS和JavaScript代码示例,用于从JSON数据中提取数据并在网页上显示。

JSON Data Display.fed-reg-container {  background-color: black;  color: white;  padding: 20px;  margin: 20px 0;}.title {  color: #fcb900;}.fed-reg-button {  background-color: #fcb900;  color: black;  padding: 10px;  display: block;  max-width: 100px;  text-align: center;  font-weight: 600;  text-decoration: none;}
const xmlhttp = new XMLHttpRequest();xmlhttp.onload = function() { const myArr = JSON.parse(this.responseText); let text = ""; for (let i in myArr.results) { let agencies = myArr.results[i].agencies.map(a => a.raw_name).join(', '); text += "

" + myArr.results[i].title + "

" + myArr.results[i].type + "

" + agencies + " Document # " + myArr.results[i].document_number + "

Posted on: " + myArr.results[i].publication_date + "

" + myArr.results[i].abstract + "

Read More
"; } text += ""; document.getElementById("demo").innerHTML = text;};xmlhttp.open( "GET", "https://www.federalregister.gov/api/v1/documents.json?conditions%5Bagencies%5D%5B%5D=agriculture-department&conditions%5Bagencies%5D%5B%5D=federal-highway-administration&conditions%5Bagencies%5D%5B%5D=fish-and-wildlife-service&conditions%5Bagencies%5D%5B%5D=forest-service&conditions%5Bagencies%5D%5B%5D=interior-department&conditions%5Bagencies%5D%5B%5D=international-boundary-and-water-commission-united-states-and-mexico&conditions%5Bagencies%5D%5B%5D=land-management-bureau&conditions%5Bagencies%5D%5B%5D=national-highway-traffic-safety-administration&conditions%5Bagencies%5D%5B%5D=national-park-service&conditions%5Bagencies%5D%5B%5D=reclamation-bureau&conditions%5Bagencies%5D%5B%5D=environmental-protection-agency&conditions%5Bagencies%5D%5B%5D=council-on-environmental-quality&conditions%5Bagencies%5D%5B%5D=safety-and-environmental-enforcement-bureau&conditions%5Bagencies%5D%5B%5D=environment-office-energy-department&conditions%5Bcomment_date%5D%5Bgte%5D=05%2F01%2F2023&conditions%5Bcomment_date%5D%5Blte%5D=01%2F01%2F2050&conditions%5Bterm%5D=arizona&conditions%5Btype%5D%5B%5D=RULE&conditions%5Btype%5D%5B%5D=PRORULE&conditions%5Btype%5D%5B%5D=NOTICE", true);xmlhttp.send();

在这个示例中,HTML定义了一个用于显示数据的 div 元素(id=”demo”)。CSS提供了基本的样式,使数据显示更清晰。JavaScript代码使用 XMLHttpRequest 从指定的URL获取JSON数据,然后解析数据,并使用 map() 和 join() 方法处理嵌套的 agencies 数组,最后将提取的数据动态地添加到 div 元素中。

注意事项

错误处理: 在实际应用中,需要添加错误处理机制,例如检查 XMLHttpRequest 的状态码,以及处理JSON解析可能出现的异常。数据验证: 在访问JSON数据之前,应该验证数据的结构和类型是否符合预期,以避免出现意外的错误。性能优化: 如果JSON数据量很大,可以考虑使用分页加载或虚拟滚动等技术来优化性能。兼容性: 确保代码在不同的浏览器和设备上都能正常运行。

总结

通过使用 map() 和 join() 方法,我们可以有效地处理嵌套的JSON数组,并从中提取所需的数据。这种方法不仅简洁,而且可以避免因索引错误导致的代码中断。在实际应用中,可以根据具体的需求进行调整和扩展,例如添加更复杂的逻辑来处理不同的数据结构和类型。

以上就是解析嵌套JSON数组:提取并显示多层级数据的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1513539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 07:48:34
下一篇 2025年12月20日 07:48:44

相关推荐

  • JavaScript中复杂嵌套对象数组的映射与数据提取指南

    本文旨在解决JavaScript中处理嵌套对象数组时常见的映射(map)方法误用及数据提取问题。通过分析Array.prototype.map与Object.values的区别,演示如何从复杂JSON结构中准确提取shipper_name和_s等特定字段,并提供结合多源数据的解决方案,同时强调JSO…

    2025年12月20日
    000
  • 优化jQuery页面加载:确保UI交互逻辑在初始渲染时正确执行

    本文探讨了在jQuery应用中,如何确保依赖用户交互的UI逻辑(如元素显示/隐藏、数据处理)在页面首次加载时即正确执行,避免初始状态不一致的问题。我们将介绍两种主要策略:在document.ready中直接调用相关函数,以及利用CSS类管理元素的初始可见性,以实现更流畅的用户体验。 在web开发中,…

    2025年12月20日
    000
  • 在文档首次加载时调用多个函数的正确方法

    在页面开发中,经常需要在文档加载完成后执行一些初始化操作,例如根据下拉框的初始值显示或隐藏某些元素。然而,如果直接在 $(document).ready() 中绑定事件监听,可能会导致首次加载时,这些初始化操作没有被触发。本文将介绍两种方法来解决这个问题,确保在页面加载完成后,指定的函数能够立即执行…

    2025年12月20日
    000
  • 在页面加载时执行JavaScript函数以初始化UI状态的最佳实践

    本文旨在探讨在jQuery页面加载完成后,如何确保JavaScript函数能够立即执行,以正确初始化UI元素状态,避免出现首次加载时UI显示不一致的问题。我们将介绍两种主要方法:直接调用函数和利用CSS类进行状态管理,并强调采用CSS类管理UI可见性的优势与最佳实践。 确保页面加载时函数执行:解决U…

    2025年12月20日
    000
  • 在文档首次加载时调用两个不同函数的正确方法

    在文档首次加载时,如何正确调用两个不同的 JavaScript 函数的问题。通过 jQuery 的 $(document).ready() 方法,我们可以确保在 DOM 完全加载后执行函数。本文将提供两种解决方案,包括直接调用函数和使用 CSS 类来控制元素的显示和隐藏,并详细说明每种方法的优缺点和…

    2025年12月20日
    000
  • JavaScript实现基于最长子域后缀的字符串分组

    本教程详细阐述了如何使用JavaScript将一组字符串(如域名)根据其最长的共同后缀子串进行分组。通过一个分步算法,我们将字符串处理成一个字典,其中键是作为组标识的最长子域后缀,值是属于该组的原始字符串列表,从而实现精准的层次化数据组织。 引言与问题定义 在数据处理中,我们经常需要对字符串进行分类…

    2025年12月20日
    000
  • 根据最长公共后缀子串对字符串进行分组的教程

    本教程旨在解决如何根据字符串的最长公共后缀子串(特别是域名/子域名结构)对一组字符串进行高效分组的问题。我们将通过一个JavaScript函数示例,详细解析其实现逻辑,包括如何识别子域名关系、构建分组字典,并确保每个字符串被精确地归类到其最长的匹配后缀子串下,从而生成一个结构化、易于理解的分组结果。…

    2025年12月20日
    000
  • 优化jQuery弹窗中动态外部链接跳转的事件处理

    本文旨在解决jQuery弹窗中外部链接重定向按钮重复绑定事件处理器导致跳转错误的问题。当用户连续点击多个外部链接时,弹窗中的跳转按钮可能始终指向首次点击的链接。核心解决方案是利用off(‘click’)方法在每次绑定新事件前解除旧的事件处理器,确保跳转行为始终指向最新的目标U…

    2025年12月20日
    000
  • 优化JavaScript日期输入框:解决自动斜杠格式化中的删除难题

    本教程探讨JavaScript中日期输入框自动添加斜杠时遇到的删除难题,特别是光标在斜杠处停止的问题。通过采用基于keypress和input事件的优化策略,我们展示如何实现流畅的数字输入和自动格式化(如MM/DD/YYYY),同时改善用户删除字符的体验。文章提供详细代码示例,并讨论了光标行为及最佳…

    2025年12月20日
    000
  • 掌握 Array.prototype.find():对象引用与值类型返回解析

    Array.prototype.find() 方法在 JavaScript 和 TypeScript 中用于查找数组中符合条件的第一个元素。其关键在于,当查找目标是对象时,它返回的是对原始数组中该对象的引用,这意味着对返回值的修改会直接影响原数组。而当查找目标是基本数据类型时,它返回的是该值的副本。…

    2025年12月20日
    000
  • JavaScript 中使用 classList 添加 CSS 类时解决样式冲突

    本文旨在解决在使用 JavaScript 的 classList 动态添加 CSS 类时,由于类添加顺序或 CSS 优先级问题导致的样式冲突。我们将探讨如何确保添加的类能够正确覆盖之前的类,并提供多种解决方案,包括显式移除冲突类和利用 CSS 的级联特性。通过学习本文,你将能够有效地管理和控制 Ja…

    2025年12月20日
    000
  • Angular中“加载更多”按钮延迟隐藏问题的深度解析与优化

    在Angular应用中实现“加载更多”功能时,如果“加载更多”按钮的隐藏逻辑处理不当,可能导致按钮在所有数据加载完毕后仍需额外点击一次才能消失。本文将深入分析这一常见问题,揭示其根本原因在于状态更新与条件判断的顺序,并提供一个可靠的解决方案,通过调整loadMore函数的内部逻辑,确保按钮在数据完全…

    2025年12月20日
    000
  • 动态 CSS 类名覆盖:JavaScript classList 的正确使用姿势

    本文旨在解决 JavaScript 中使用 classList 添加 CSS 类时,由于类名优先级问题导致样式冲突的问题。我们将深入探讨 CSS 样式的层叠规则,并提供清晰的代码示例,演示如何正确地添加和移除类名,确保所需的样式始终生效,避免样式覆盖问题。 在使用 JavaScript 操作 CSS…

    2025年12月20日
    000
  • 创建滚动时固定在容器顶部的侧边栏

    本文旨在解决在网页开发中创建滚动时固定在容器顶部的侧边栏的问题。我们将提供详细的代码示例和解释,帮助开发者实现一个在指定容器内保持置顶的侧边栏效果,并避免与其他内容发生重叠。通过本文的学习,你将掌握利用 JavaScript 和 CSS 实现粘性侧边栏的关键技术。 实现粘性侧边栏 在网页设计中,粘性…

    2025年12月20日
    000
  • Angular应用中“加载更多”按钮延迟隐藏问题的精确控制与解决方案

    本教程深入探讨了Angular应用中“加载更多”按钮在所有数据加载完毕后仍延迟隐藏的问题。通过分析初始逻辑的缺陷,我们提供了一种优化loadMore函数的解决方案,确保itemsNumber更新后立即准确评估按钮的可见性,从而实现更流畅的用户体验和精确的UI状态管理。 1. 问题背景与现象分析 在开…

    2025年12月20日
    000
  • 实现滚动吸顶效果:让Aside元素在容器内保持可见

    实现滚动吸顶效果:让Aside元素在容器内保持可见 本文旨在提供一种实现滚动吸顶效果的方案,使aside元素在容器内滚动时保持在顶部,直到容器底部。通过监听滚动事件并动态修改元素的position属性,可以实现这一效果。本文将详细介绍实现原理、代码示例以及注意事项,帮助开发者轻松实现滚动吸顶功能。 …

    2025年12月20日
    000
  • GeoJSON多边形坐标有效性验证指南

    本文旨在解决在使用Mapbox等地图库绘制多边形时,因GeoJSON数据无效而导致的错误。我们将介绍如何利用Turf.js库中的@turf/boolean-valid模块,在绘制多边形之前对其坐标有效性进行预验证,从而确保数据符合GeoJSON规范,避免运行时错误,提升应用的健壮性。 1. GeoJ…

    2025年12月20日
    000
  • GeoJSON多边形有效性校验:使用Turf.js避免绘图错误

    在使用Mapbox等地图库绘制GeoJSON多边形时,常因数据无效导致错误。本文将介绍如何利用Turf.js库中的booleanValid函数,在绘图前高效校验多边形坐标的有效性,确保GeoJSON数据的合规性,从而避免运行时错误,提升应用稳定性。通过示例代码和注意事项,帮助开发者正确处理多边形数据…

    2025年12月20日
    000
  • JavaScript 实现动态背景颜色切换:无需刷新页面

    本文旨在解决网页背景颜色动态切换的问题,避免每次点击按钮都需要刷新页面的困扰。我们将通过 JavaScript 代码,实现点击按钮后随机改变背景颜色,并将颜色名称显示在页面上。核心在于每次点击事件发生时,都重新生成随机颜色值,确保每次都能获得新的颜色。 实现动态背景颜色切换 要实现点击按钮动态改变网…

    2025年12月20日
    000
  • 动态改变网页背景颜色:无需重新加载页面

    本文旨在解决网页背景颜色动态切换的问题,避免每次点击按钮都需要重新加载页面的情况。通过将颜色随机选择逻辑放置于按钮点击事件处理函数内部,确保每次点击都能获取新的颜色值,从而实现背景颜色的动态更新。本文将提供详细的代码示例和解释,帮助开发者轻松实现此功能。 在网页开发中,动态改变页面元素(例如背景颜色…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信