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

前言

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

相关推荐
我是小路路呀21 分钟前
element级联选择器:已选中一个二级节点,随后又点击了一个一级节点(仅浏览,未确认选择),此时下拉框失去焦点并关闭
javascript·vue.js·elementui
程序员爱钓鱼26 分钟前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder34 分钟前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL1 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码1 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_1 小时前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy2 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌2 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构
sg_knight2 小时前
拥抱未来:ECMAScript Modules (ESM) 深度解析
开发语言·前端·javascript·vue·ecmascript·web·esm