XML转JSON离线使用问题及特定数据提取需求(JavaScript)
嘿,我来帮你搞定这几个问题!先解决Plnkr离线打不开的麻烦,再一步步处理数据提取的需求~
解决XML转JSON后的离线访问与数据提取问题
先搞定Plnkr离线无法打开的问题
Plnkr保存后没法离线访问,大概率是这两个原因:
- 项目依赖了在线资源(比如CDN加载的JS库),离线时没法拉取这些资源
- 生成的JSON没有保存到本地,离线后无法读取转换结果
你可以这么解决:
- 把Plnkr里的所有代码(HTML、JS、甚至转换好的JSON)都下载到本地文件夹
- 如果用了在线脚本(比如XML转JSON的库),把这些库的本地版本也下载下来,替换掉原来的CDN链接
- 转换出JSON后,把它导出成单独的
.json文件存在本地,离线时直接读取这个文件就行,不用再依赖在线转换
接下来处理三个数据提取需求
假设你的JSON结构是人员数组,每个人员对象包含name(姓名)、id(唯一标识)、spouse(配偶信息)、parents(父母ID/对象)这类字段(家谱类XML转JSON的常见结构),我给你写具体的JS代码示例:
1. 提取每个人的配偶信息
遍历所有人员,整理出每个人对应的配偶信息:
// 假设转换后的JSON数据存在peopleData变量里 const spouseInfoList = peopleData.map(person => { return { 姓名: person.name, 配偶: person.spouse ? person.spouse.name : '暂无配偶信息' }; }); // 打印结果或者渲染到页面 console.log(spouseInfoList);
如果你的配偶字段是嵌套结构(比如person.marriage.spouse),直接调整字段名就行,灵活适配你的JSON结构。
2. 获取最后10个人的数据
用数组的slice方法直接截取最后10项,简单高效:
// 假设peopleData是按顺序排列的人员数组 const last10Persons = peopleData.slice(-10); console.log(last10Persons);
如果数组顺序不符合需求,你可以先按时间/ID排序,再用slice(-10)截取。
3. 提取特定人员的祖先信息
这个需要递归遍历祖先链,我写个递归函数帮你收集所有祖先:
function getAncestors(targetPersonId, allPeople) { // 先找到目标人员 const target = allPeople.find(person => person.id === targetPersonId); if (!target) return []; const ancestors = []; // 遍历父母信息,递归查找祖辈 if (target.parents) { target.parents.forEach(parentId => { const parent = allPeople.find(p => p.id === parentId); if (parent) { ancestors.push(parent); // 递归添加祖辈的祖先 ancestors.push(...getAncestors(parentId, allPeople)); } }); } // 去重,避免同一个祖先被多次添加 return [...new Map(ancestors.map(a => [a.id, a])).values()]; } // 使用示例:传入你要查询的人员ID const targetAncestors = getAncestors('你要查询的人员ID', peopleData); console.log(targetAncestors);
这个函数会把目标人员的父母、祖父母、曾祖父母等所有祖先都找出来,还会自动去重。记得根据你实际的JSON字段调整id和parents的字段名哦~
内容的提问来源于stack exchange,提问作者Valery Dauzhuk
相关产品推荐
相关产品推荐

