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的更多相关文章

  1. javascript基础入门之js中的数据类型与数据转换01

    javascript基础入门之js中的数据结构与数据转换01 js的组成(ECMAScript.BOM.DOM)        js中的打印语句:        数据类型        变量      ...

  2. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  3. WebSocket实战之————GatewayWorker使用笔记例子

    参考文档:http://www.workerman.net/gatewaydoc/ 目录结构 ├── Applications // 这里是所有开发者应用项目 │ └── YourApp // 其中一 ...

  4. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

  5. TP5整合 WorkerMan 以及 GatewayWorker

    TP5整合GatewayWorker Windows版安装 a)使用composer create-project topthink/think testTG,来安装thinkphp5. b)进入t ...

  6. Spring多数据源解决方案

    Figure 2 多数据源的选择逻辑渗透至客户端 解决方案 Figure 3 采用Proxy模式来封转数据源选择逻辑 通过采用Proxy模式我们在方案实现中实现一个虚拟的数据源.并且通过它来封装数据源 ...

  7. webpack 知识点

    安装 webpack npm install -g webpack npm install -g webpack-cli@2.x 初始化项目 npm init -y npm install --sav ...

  8. php-GatewayWorker搭建实时聊天室

    ├── Applications // 这里是所有开发者应用项目 │ └── YourApp // 其中一个项目目录,目录名可以自定义 │ ├── Events.php // 开发者只需要关注这个文件 ...

  9. Python自动化开发 - AJAX

    一  AJAX预备知识:json进阶 1.1 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON是用字符串来表示Javascript对象 json ...

随机推荐

  1. nginx反向代理与负载均衡

    一:nginx反向代理与负载均衡配置思路与用法 1.nginx反向代理:就是你去相亲时,媒婆就是这里的代理,让媒婆带你去见姑娘 2.nginx负载均衡:就是有很多的媒婆经过商量给你选出最适合你的姑娘, ...

  2. postman断言作用及怎么使用

    这段时间一直在学习postman,在请求中使用断言,很多人不是很了解postman断言,其实呢,postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 1.设置环 ...

  3. nmap安装过程

    nmap是一个网络扫描和主机检测工具. 功能:1.扫描目标主机开放的端口 2.扫描目标主机特定端口是否关闭 3.路由跟踪(到目标主机所经过的网络节点及其通过时间) 4.扫描一个网段下的所有IP 5.探 ...

  4. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

  5. if与switch的性能比较

    前言 之前学习Java时,遇到了个问题,有点纠结.当if与switch都实现相同的功能时,该改采用哪种方法实现?我并不懂得如何准确测量两者之间的性能区别,便在OlineJudge上找条该类型的题,来测 ...

  6. 老李分享:robotium常用API 1

    老李分享:robotium常用API   robotium常用API Robotium中最重要的类Solo类:其中提供了模拟用户活动的点击.搜索.拖拽等方法. 英文api(经常断开连接打不开):htt ...

  7. [编织消息框架][JAVA核心技术]动态代理应用5-javassist

    基础部份: 修改class我们用到javassist,在pom.xml添加 <properties> <javassist.version>3.18.2-GA</java ...

  8. 震荡信号Simulink仿真

    1. simulink仿真设计 震荡信号本质是调制信号,可以表示为: u(t)=A*(1+m*cos(Ωt+θ))*cos(ωt+φ)=A*cos (ωt+φ)+ A*m*cos(Ωt+θ)*cos( ...

  9. SpringMVC基础学习(二)—开发Handler

    一.Handler开发         Handler的开发方式在springmvc中有多种,下面我们主要讲解三种实现方式:实现Controller接口.实现HttpRequestHandler接口. ...

  10. Struts2基础学习(七)—值栈和OGNL

    目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义      ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...