数据转换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 ...
随机推荐
- SQL Server数据库读取数据的DateReader类及其相关类
之前学了几天的SQL Server,现在用C#代码连接数据库了. 需要使用C#代码连接数据库,读取数据. 涉及的类有: ConfigurationManage SqlConnection SqlCom ...
- Webstorm编译TypeScript报错
Accessors are only available when targeting ECMAscript 5 and higher. 解决办法: File Watchers 在tsc.cmd命令上 ...
- 原生JS实现弹出窗口的拖拽
上一篇说了一下弹出窗口功能的实现思路,一般情况下紧接着就会需要做到弹窗的移动,当然现在有很插件.库比如hammer可以使用,效率也非常好.但我觉得还是有必要了解一下原生JS的实现思路及方式,如下: 思 ...
- CentOS下查看nginx和php的编译参数
在已经编译安装好的nginx和php的server上是可以查看之前编译时候的参数的,方法如下. 1.查看nginx的编译参数 # nginx -V nginx version: nginx/1.9.4 ...
- Java 垃圾回收(GC) 泛读
Java 垃圾回收(GC) 泛读 文章地址:https://segmentfault.com/a/1190000008922319 0. 序言 带着问题去看待 垃圾回收(GC) 会比较好,一般来说主要 ...
- 老李分享:Uber究竟是用什么开发语言? 2
Uber的任务分派系统是运行在Node上,这是一个运行在服务器端的JavaScript平台.当一个客户打开app或者网站来进行车辆预定或者调用其他的API来查看可用车辆信息的时候,大部分的这些服务都是 ...
- Java环境----JDK开发环境搭建及环境变量配置
1.啥是jdk? jdk的是java development kit的缩写,意思是java程序开发的工具包. jdk的版本,一共有三种,标准版(j2se),企业版(j2ee),移动设备版(j2me). ...
- 简聊iOS支付集成(支付宝和微信支付)
一.支付集成是什么 1.现在大部分app都有快捷支付功能,支付集成将第三方支付平台集成到自己的项目中,能够完成自己项目中的支付功能, 二.支付集成的使用 <1>.支付宝: 下载SDK和De ...
- 通过UDP广播实现Android局域网Peer Discovering
本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...
- java 基础知识九 类与对象
java 基础知识九 类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...