数据转换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"
}
}
]
};
数据转换d2d.js的更多相关文章
- javascript基础入门之js中的数据类型与数据转换01
javascript基础入门之js中的数据结构与数据转换01 js的组成(ECMAScript.BOM.DOM) js中的打印语句: 数据类型 变量 ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- WebSocket实战之————GatewayWorker使用笔记例子
参考文档:http://www.workerman.net/gatewaydoc/ 目录结构 ├── Applications // 这里是所有开发者应用项目 │ └── YourApp // 其中一 ...
- thinkphp ajax 无刷新分页效果的实现
思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...
- TP5整合 WorkerMan 以及 GatewayWorker
TP5整合GatewayWorker Windows版安装 a)使用composer create-project topthink/think testTG,来安装thinkphp5. b)进入t ...
- Spring多数据源解决方案
Figure 2 多数据源的选择逻辑渗透至客户端 解决方案 Figure 3 采用Proxy模式来封转数据源选择逻辑 通过采用Proxy模式我们在方案实现中实现一个虚拟的数据源.并且通过它来封装数据源 ...
- webpack 知识点
安装 webpack npm install -g webpack npm install -g webpack-cli@2.x 初始化项目 npm init -y npm install --sav ...
- php-GatewayWorker搭建实时聊天室
├── Applications // 这里是所有开发者应用项目 │ └── YourApp // 其中一个项目目录,目录名可以自定义 │ ├── Events.php // 开发者只需要关注这个文件 ...
- Python自动化开发 - AJAX
一 AJAX预备知识:json进阶 1.1 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON是用字符串来表示Javascript对象 json ...
随机推荐
- centos安装python2.7并安装easy_install,pip,ipython
1.安装python 下载python2.7.10 # wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz # tar -z ...
- 机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法
对于样本数据的散点图形如函数y=ax2+bx+c的图像的数据, 在python中的拟合过程为: ##最小二乘法 import numpy as np import scipy as sp import ...
- SQL Server 给表和字段添加说明
.添加表说明 EXECUTE sp_addextendedproperty N'MS_Description','表说明',N'user',N'dbo',N'table',N'表名',NULL,NUL ...
- iOS 一个方法首次安装滚播图 展示应用简介
//第一次安装时会有引导页展示 非第一次直接进入应用页 if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"isOne&q ...
- 【Flex】编辑器的缩放功能(绝对定位和相对定位)
一.横向的ide拖动缩放效果 <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplic ...
- 【Electron】Electron开发入门(七):打开本地文件或者网页链接 and webview里操纵electron api
1.打开本地文件或者网页链接 // 打开系统本地文件 const {shell} = require('electron'); // Open a local file in the default ...
- 【Egret】Lakeshore 使用中的一些疑难解决技巧!
用Lakeshore 1.2.1版本发布的html,会出现一些用户不想要的东西,下面讲讲如何去掉: 一.问题:游戏或者动画在PC端也能跟随游览器自适应. 解决方法:①找到发布文件下的 egret_l ...
- android Instrumentoation 问答
android Instrumentoation 问答 1.instrumentation是执行application instrumentation代码的基类.当应用程序运行的时候instrum ...
- C#设计模式:责任链模式
设计模式是面向对象编程的基础,是用于指导程序设计.在实际项目开发过程中,并不是一味将设计模式进行套用,也不是功能设计时大量引入设计模式.应该根据具体需求和要求应用适合的设计模式.设计模式是一个老话题了 ...
- 移动端emoji图标的存储和显示
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/6694595.html 一.emoji是什么 绘文字(日语:絵文字/えもじ emoji)是日本在无线通信中所使用的 ...