首页 前端知识 json文件的格式转换

json文件的格式转换

2024-06-21 09:06:48 前端知识 前端哥 878 374 我要收藏

了解一下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>

转载请注明出处或者链接地址:https://www.qianduange.cn//article/13197.html
标签
评论
发布的文章

HTML5 多人游戏开发(二)

2024-07-20 17:07:44

web前端(第一天HTML)

2024-07-20 17:07:16

HTML 音频(Audio)

2024-07-20 17:07:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!