年前无意间开源了一个简单的方法,没想到真的有人下载!

前言

年前在 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的方法,没想到会解决一部分人的痛点还是很高兴的,还希望大家能给多对代码多提一些宝贵的意见,或者对此有什么拓展想法也希望能评论告诉我。

相关推荐
水银嘻嘻11 分钟前
08 web 自动化之 PO 设计模式详解
前端·自动化
Zero1017132 小时前
【详解pnpm、npm、yarn区别】
前端·react.js·前端框架
&白帝&2 小时前
vue右键显示菜单
前端·javascript·vue.js
Wannaer2 小时前
从 Vue3 回望 Vue2:事件总线的前世今生
前端·javascript·vue.js
羽球知道3 小时前
在Spark搭建YARN
前端·javascript·ajax
光影少年3 小时前
vue中,created和mounted两个钩子之间调用时差值受什么影响
前端·javascript·vue.js
青苔猿猿3 小时前
node版本.node版本、npm版本和pnpm版本对应
前端·npm·node.js·pnpm
一只码代码的章鱼4 小时前
Spring的 @Validate注解详细分析
前端·spring boot·算法
zimoyin4 小时前
Kotlin 协程实战:实现异步值加载委托,对值进行异步懒初始化
java·前端·kotlin
恋猫de小郭4 小时前
如何查看项目是否支持最新 Android 16K Page Size 一文汇总
android·开发语言·javascript·kotlin