yewanji 2021-12-06 16:23 采纳率: 36.2%
浏览 100
已结题

js将扁平化json变成树状结构

     我需要转成如下格式
       {
           student:{
             name:"张三",
             age:18,
             feature:{
                weight:80,
                hegiht:168
             }
          }
       }


 // 原数据格式
  var result={
    "student.name":"张三",
    "student.age":18,
    "student.feature.weight":80,
    "student.feature.height":168
  }
  • 写回答

3条回答 默认 最新

  • baidu_19510369 2021-12-07 10:16
    关注

    基于您的问题,我给了如下的解决方式,稍微有点繁琐,可供参考,需要借助loadsh的深度对象拷贝方法,如果自己写也行(这个深度拷贝方法),代码如下。

    1. loadsh的引入https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js(%E4%B8%BA%E4%BA%86%E4%BD%BF%E7%94%A8%E6%B7%B1%E5%BA%A6%E6%8B%B7%E8%B4%9D%E6%96%B9%E6%B3%95%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%B7%B1%E5%86%99%EF%BC%8C%E4%B8%8D%E9%9C%80%E8%A6%81%E5%BC%95%E5%85%A5%E6%96%B9%E6%B3%95%E4%B9%9F%E8%A1%8C)
    2. // 原数据格式
      const result = {
      "title": "asfff",
      "student.name": "张三",
      "student.age": 18,
      "student.feature.weight": 80,
      "student.feature.height": 168,
      "student.highSchool.1": 20,
      "student.highSchool.3": 80
      };
      代码:
      let obj = {},
      stObj = [];
      const objectReverseTree = (data) => {
      let retData = Object.entries(data);
      for (let i = 0, len = retData.length; i < len; i++) {
      const item = retData[i];
      let first = item[0].split(".");
      if (first.length === 1) {
       obj[first] = item[1];
      
      } else {
       let ss = first.reduceRight((pre, next) => ({
         [next]: pre
       }), item[1]);
       stObj.push(ss);
      
      }
      }
      const newObj = _.defaultsDeep(obj, ...stObj);
      console.log(newObj, '-------stObj----')
      return newObj;
      };

    objectReverseTree(result);
    //

    img

    纯属参考,如有帮助,望指教 采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 赞助了问题酬金 12月6日
  • 修改了问题 12月6日
  • 展开全部

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么