数据转换d2d.js

时间:2023-03-09 23:59:09
数据转换d2d.js

d2d.js

地址:https://github.com/daycool/d2d.js

what?

d2d是data2data的简写,用来转换为符合需求的data.

why?

我们在开发中定义好了的接口字段,后端工程可能因某些原因修改了字段,
或者我们用的插件或组件用到的数据和我们提供的数据不一致等等,
我们可以用d2d.js来转换成一样的, 避免前后端争论谁来修改字段及修改字段带来的成本。

how?

目前支持两种转换风格:
一是jsonSchema风格,与jsonSchema风格一致用起来简单,但写起来代码太多。
二是jsonSymbol风格,利用一些特殊符号大大简少代码量。 let newData = d2d(data, jsonSchema | jsonSymbol);
data 源数据
jsonSchema | jsonSymbol 两种数据模板
newData 转换后的数据

syntax

jsonSchema风格

  name  		源数据字段key
replaceName 新数据字段key
aliasName 给新别名
addName 如果name不存在添加 支持string和function
delName 根据某些条件删除name

jsonSymbol风格

 !   相当于replaceName (默认为!)
= 相当于aliasName
+ 相当于addName
- 相当于delName &和@用来区分值是{}还是[](默认&)
^ 配合&和@使用,用来表示值是{}或[]时,key的replaceName

Demo

jsonSechema用法

Demo1

调用:

let data = {
user_name: 'daycool',
sex: '男'
}; let jsonSchema = {
properties: [
{
name: 'user_name',
replaceName: 'userName'
}
]
}; let newData = d2d(data, jsonSchema);

结果:

newData = {
userName: 'daycool',
sex: '男'
};

Demo2

调用:

let data = {
user_name: 'daycool',
sex: '男'
}; let jsonSchema = {
properties: [
{
name: 'user_name',
aliasName: 'userName'
}
]
}; let newData = d2d(data, jsonSchema);

结果:

newData = {
userName: 'daycool',
user_name: 'daycool',
sex: '男'
};

jsonSymbol用法

Demo1

调用:

let data = {
user_name: 'daycool',
sex: '男'
}; let jsonSchema = {
'user_name': 'userName',// 默认是!
}; let newData = d2d(data, jsonSchema);

结果:

newData = {
userName: 'daycool',
sex: '男'
};

Demo2

调用:

let data = {
user_name: 'daycool',
sex: '男'
}; let jsonSchema = {
'=user_name': 'userName',
}; let newData = d2d(data, jsonSchema);

结果:

newData = {
userName: 'daycool',
user_name: 'daycool',
sex: '男'
};

Demo3

调用:

let data = {
err_msg: '登录失败',
err_code: 403,
list: [
{
'id': '帖子id',
'name': '帖子名称',
'user_id': {
id: 123,
name: 'daycool'
}
},
{
'id': '帖子id2',
'name': '帖子名称2',
'user_id': {
id: 123,
name: 'daycool2'
}
},
]
}; let jsonSchema = {
'=err_msg': 'message',
err_code: 'code',
'@list': {
'^list': 'data',
id: 'postId',
name: 'postName',
user_id: {
'^user_id': 'user',
id: 'userId',
name: 'userName'
}
}
}; let newData = d2d(data, jsonSchema);

结果:

newData = {
"message": "登录失败",
"err_msg": "登录失败",
"code": 403,
"data": [
{
"postId": "帖子id",
"postName": "帖子名称",
"user": {
"userId": 123,
"userName": "daycool"
}
},
{
"postId": "帖子id2",
"postName": "帖子名称2",
"user": {
"userId": 123,
"userName": "daycool2"
}
}
]
};