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"
}
}
]
};