json文件的格式转换

json文件的格式转换了解一下 json 是什么 学校里面只是很浅的学习过 json 好了话不多说 咱们直接开始 温故而知新 它是啥 json 全名为 JavaScript Object Notation 看到 json 我们总会和联想到一起 因为 json 里面有它名字 格式也与 js 中对象

大家好,我是讯享网,很高兴认识大家。

了解一下json是什么

学校里面只是很浅的学习过json,好了话不多说,咱们直接开始,温故而知新

它是啥?

json全名为JavaScript Object Notation,看到json我们总会和联想到一起,因为json里面有它名字,格式也与js中对象(object)并无差别,但值得注意的是:json虽然是基于ECMAScript语法的,但并不意味着必须要在js中使用,只是因为语法相似,js的开发者能更快的上手。

几乎所有的编程语言都对json的数据转换的支持

js中,json与对象的转换:JSON.parse()/JSON.stringify();
java中,json与对象的转换:fromJson()/toJson();
python中,json与对象的转换:json.dumps()/json.loads();

json格式

花括弧,方括弧,冒号和逗号
花括弧表示一个“容器”
方括号装载数组
名称和值用冒号隔开
数组元素通过逗号隔开


讯享网

好了json也了解的差不多了解了,咱们言归正传看看题目要求

源代码在文章最后,需要的自取

其实它要求不怎么复杂这个题,主要我第一次搞这玩意,刚开始我准备用python来写的,奈何水平有限,转换成json文件时候输出为null或{},解决不了我就换了,用js来写,下面是代码。

<script> fetch("./params.json") //运行浏览器报了跨域的错,先开始我以为是绝对路径的问题,修改成相对路径还是报错,去搜了下fetch的涵义,是可能会造成异步操作,就是fetch还没有读取完json文件,就开始运行下面的代码了 //解决方法,用的本地服务器运行的就不会报错,转换后输出的为json字符串 .then((response) => response.json()) .then((paramsJson) => { const targetDict = {}; // 遍历 paramsJson 对象的每一个属性 Object.entries(paramsJson).forEach(([objName, objData]) => { // 判断是否需要转换 if ( objName !== "g_unKown" && objData.Attributes.id && objData.Attributes.id < 8000 ) { // 获取对象的 id 和 show 属性 const objId = objData.Attributes.id; const objShow = objData.Attributes.show || ""; // 获取父对象的 Attributes 属性 const parentAttributes = objData.Attributes; // 获取子对象的 nickName 属性 const childNickName = Object.entries(objData) .filter(([key, value]) => key !== "Attributes") .map(([key,value]) => { // 获取兄弟对象的 show 属性 const siblingShow = parentAttributes[key].Attributes.show || ""; // 拼接子对象的 nickName return `${siblingShow}_${value.Attributes.show}`; }) .join(", "); // 将转换后的数据存储到 targetDict 中 targetDict[`flaw_type_${objId}`] = { name: `flaw_type_${objId}`, nickName: `${objShow}_${childNickName}`, }; } }); // 将转换后的数据输出为 JSON 字符串 const targetJson = JSON.stringify(targetDict, null, 2); console.log(targetJson); }); </script>

讯享网
讯享网<script> // 创建 XMLHttpRequest 对象 const xhr = new XMLHttpRequest(); // 打开请求 xhr.open("GET", "./params.json"); // 设置响应类型为 JSON xhr.responseType = "json"; // 设置响应处理函数 xhr.onload = function () { // 判断请求是否成功 if (xhr.status === 200) { // 获取响应数据 const paramsJson = xhr.response; // 创建一个空对象,用于存储转换后的数据 const targetDict = {}; // 遍历 paramsJson 对象的每一个属性 Object.entries(paramsJson).forEach(([objName, objData]) => { // 判断是否需要转换 if ( objName !== "g_unKown" && objData.Attributes.id && objData.Attributes.id < 8000 ) { // 获取对象的 id 和 show 属性 const objId = objData.Attributes.id; const objShow = objData.Attributes.show || ""; // 获取父对象的 Attributes 属性 const parentAttributes = objData.Attributes; 遍历子对象的 Level 属性 const childNickName = Object.entries(objData) .filter(([key, value]) => key !== "Attributes" && key.startsWith("Level")) // 过滤掉 Attributes 属性和非 Level 属性 .map(([key,value]) => { const siblingAttributes = parentAttributes[key]; // 获取兄弟对象的 Attributes 属性 if (siblingAttributes && siblingAttributes.Attributes) { // 如果兄弟对象存在 Attributes 属性,则获取其 show 属性,并拼接成子对象的 nickName 属性 const siblingShow = siblingAttributes.Attributes.show || ""; return `${siblingShow}_${value.Attributes.show}`; } else { // 否则返回空字符串 return ""; } }) .filter((value) => value !== "") // 过滤掉值为空字符串的元素 .join(", "); // 将数组元素拼接成一个字符串 // 将转换后的数据存储到 targetDict 对象中 targetDict[`flaw_type_${objId}`] = { name: `flaw_type_${objId}`, nickName: `${objShow}_${childNickName}`, }; } }); // 将 targetDict 对象转换为 JSON 格式的字符串 const targetJson= JSON.stringify(targetDict, null, 2); // 输出转换后的 JSON 数据 console.log(targetJson); } else { // 如果请求失败,则输出错误信息 console.error(`请求失败:${xhr.status}`); } }; // 发送请求 xhr.send(); </script>

小讯
上一篇 2025-03-09 17:01
下一篇 2025-02-24 21:56

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/20802.html