首页 > 解决方案 > 如何使用 angular/javascript 将现有 json 的格式编码/更改为另一种格式

问题描述

这里我有一个以下格式的json

现在的格式

 {
  "info": {
    "laptop": {
    },
    "config": {
      "properties": {
        "ram": {
        },
        "processor": {
        },
        "hdd": {

        }
      }
    },
    "link": {

    },
    "name": {

    },
    "company": {
      "properties": {
        "model": {

        },
        "maker": {
          "type": "integer"
        },
        "country": {
          "type": "text"
        },
        "enterprise": {

        }

      }
    }
  }
}

我正在使用一些插件,如 ngx-tree,primeng 插件,其数据需要采用不同的格式,如下所示

所需格式

  [
        {
          name: 'laptop',

        },
        {
          name: 'config',
          children: [
            { name: 'ram', children: [] },
            { name: 'processor' },
            {name:'hdd'}
          ]
        },
         {
          name: 'link',
          children: []
        },
        {
          name: 'name',
          children: []
        },

        {
          name: 'company',
          children: [
            { name: 'model' },
            { name: 'maker' },
            { name: 'country' },
            { name: 'enterprise' }

          ]
        }
      ];

现在我的问题是如何将我的数据从当前格式更改为所需格式?有什么建议可以让我做出改变吗

标签: javascriptangular

解决方案


这是一个单行的纯功能解决方案:

const input = {
  "info": {
    "laptop": {
    },
    "config": {
      "properties": {
        "ram": {
        },
        "processor": {
        },
        "hdd": {

        }
      }
    },
    "link": {

    },
    "name": {

    },
    "company": {
      "properties": {
        "model": {
          "properties": {
            "apple": {},
            "banana": {},
            "pear": {}
          }
        },
        "maker": {
          "type": "integer"
        },
        "country": {
          "type": "text"
        },
        "enterprise": {

        }

      }
    }
  }
}

const convert = input => Object
  .entries(input)
  .map(([name, value]) => ({
    name,
    children: convert(value.properties || {})
  }))

console.log(convert(input.info));

这是一个es2015版本:

function convert(input) {
  return Object.keys(input).map(function(name) {
    return {
      name: name,
      children: convert(input[name].properties || {})
    };
  });
}

推荐阅读