前言
年前在 npm 上发布了一个开源方法,是在年前开发中想要解决的一个问题,年后后来发现,有一定的下载量,看来是解决了一些人的痛点。
想法萌生
最近在搞数据转换,要将其他平台的数据导入到自己平台中,主要类型是 json to json。在编写方法类时,希望能有一个方法能够直接将想要的字段进行转换,还可以将多个字段进行拼接或者处理。在 npm 搜索相关库时,并没有找到相关的方法,所以打算自己写一个方法。
技术选型
有了需求之后就要付出实践!
技术这边选用的是 TS + Rollup + Jest。
选用 TS 是因为方法可以控制入参类型,Rollup 小型 JavaScript 的模块打包工具,将小的代码片段编译成更大、更复杂的代码,Jest 进行单元测试。
需求实现
定义一个方法,两个入参,一个是想要转换的数据,还有一个是模板(schema),通过这个模板返回想要的数据格式。
想要转换的数据类型包括数组和对象,并支持嵌套。
具体代码很简单 40 行的代码量,主要是递归生成,附上源码欢迎大家提出意见!convert-schema-json
效果展示
安装
npm i convert-schema-json
使用
js
import { convert } from 'convert-schema-json';
// Ordinary use
const data = [
{
id: 1,
name: 'Jack'
},
{
id: 2,
name: 'Tony'
}
];
const schema = {Id: 'id', Name: 'name'};
const res = convert(data, schema);
// res = [
// { Id: 1, Name: 'Jack' },
// { Id: 2, Name: 'Tony' }
// ]
// Support schema is a function
const data = [
{
id: 1,
name: 'Jack',
profession: 'programmer'
},
{
id: 2,
name: 'Tony',
profession: 'barber'
}
]
const schema = {
Id: 'id',
NameWithProfession: {
key: ['name', 'profession'],
schema: function(name, profession) {
return `${name}-${profession}`
}
}
}
const res = convert(data, schema);
// res = [
// { Id: 1, NameWithProfession: 'Jack-programmer' },
// { Id: 2, NameWithProfession: 'Tony-barber' }
// ]
// Nested objects
const data = {
id: 1,
name: 'Jack',
profession: 'programmer',
son: {
id: 2,
name: 'Tony',
profession: 'barber'
}
}
const schema = {
son_name: 'son.name',
son_profession: 'son.profession'
}
const res = convert(data, schema);
// res = { son_name: 'Tony', son_profession: 'barber' }
// Nested objects with shcema is a function
const data = {
id: 1,
name: 'Jack',
profession: 'programmer',
son: {
id: 2,
name: 'Tony',
profession: 'barber'
}
}
const schema = {
Id: 'id',
fatherAndSonName: {
key: ['name', 'son.name'],
schema: (args) => {
return args.join('-');
}
}
}
const res = convert(data, schema);
// res = { Id: 1, fatherAndSonName: 'Jack-Tony' }
总结
年前写的无意间开源的一个简单的json to json的方法,没想到会解决一部分人的痛点还是很高兴的,还希望大家能给多对代码多提一些宝贵的意见,或者对此有什么拓展想法也希望能评论告诉我。