zoukankan      html  css  js  c++  java
  • JSON平铺功能的实现(JS操作JSON数据)

    一、什么是JSON平铺

    JSON平铺分成两种:

    平铺的json转树结构的json

    例如:

    {
        a: 'value',
        b: 'b1.value'
    }
    
    // 转换成=>
    
    {
        a: 'value',
        b: {
            b1: value,
        }
    }
    
    

    树结构转换成平铺的json

    例如:

    {
      "a": {
        "a1": 123,
        "a2": "value",
        "a3": {
          "a31": "value"
        }
      },
      "b": "value"
    }
    
    // 转换成 =>
    
    [
        a.a1,
        a.a2,
        a.a3.a31,
        b
    ]
    
    用处:

    第一种用得比较多,资料也比较多,这里不多介绍,可以看看这:
    《平铺的json转树结构的json,请看数据》

    第二种貌似不太常见,因为业务需求,需要解析json格式。网上没找到合适的答案,就自己动手实现了一个。

    二、第二种实现方法

    先列出几个要注意的点:

    1. 对于含有子节点的key值,并不作为提取对象。

    例如: a.a1, a并不需要

    1. 采用递归的方式解决数据未知层数
    2. 因为递归时需要不断提取父节点,所以初始化的时候会加入多余的头部。

    例如: a:{a1:value}实际转换成:root.a.a1,root就是我们规定的初始化的父节点。
    后续可以通过xxx.substr(xxx.indexOf('.') + 1)去掉

    实现代码:

    <script>
        let jsonDataMock = '{"a":{"a1":123,"a2":"value","a3":{}},"b":{"b1":"value","b2":{"b21":"value","b22":{"b221":123,"b222":"value","b223":"value"}}},"c":"value"}';
        let options = [];
        console.log(jsonDataMock)
    
        function parseJsonRec(jsonData, parent, options){
            if(Object.keys(jsonData).length > 0){
                Object.keys(jsonData).map(subKey =>{
                    if(typeof jsonData[subKey] == 'object'){
                        //递归
                        parseJsonRec(jsonData[subKey], parent + "." + subKey, options)
                    }else{
                        options.push(parent + "." + subKey)
                    }
                });
            }
        }
        function parseJsonWrapper(jsonDataStr){
            let jsonData = JSON.parse(jsonDataStr);
            if(typeof jsonData == 'object'){
                parseJsonRec(jsonData, "root", options)
            }
        }
    
        parseJsonWrapper(jsonDataMock)
        console.log(options)
    </script>
    

  • 相关阅读:
    MVC设置默认页面
    MySQL_DBA整理
    解决git提交敏感信息(回退git版本库到某一个commit)
    并发数计算
    高并发下的 Nginx 优化与负载均衡
    PassengerNginxdebian快速部署Rails
    Linux+postfix+extmail+dovecot打造基于web页面的邮件系统
    2018.11.30软件更新公告
    2018.10.11软件更新公告
    2018.09.25软件更新公告
  • 原文地址:https://www.cnblogs.com/soyxiaobi/p/9699503.html
Copyright © 2011-2022 走看看