数据转换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 ...
 
随机推荐
- Python中三种基本结构的语句
			
选择语句 if 条件判断 : # 条件可以加括号也可以不加括号 -- else: -- Python中没有switch语句这是可以使用if exp:.... elif exp:来代替 if 判断条件1 ...
 - 降低Redis内存占用
			
1.降低redis内存占用的优点 1.有助于减少创建快照和加载快照所用的时间 2.提升载入AOF文件和重写AOF文件时的效率 3.缩短从服务器进行同步所需的时间 4.无需添加额外的硬件就可以让redi ...
 - python如何保证输入键入数字
			
要求:python写一个要求用户输入数字,如果不是数字就一直循环要求输入,直到输入数字为止的代码 错误打开方式: while True: ten=input('Enter a number:') if ...
 - BrowserSync的安装和使用
			
BrowserSync真是前端必备神器,浏览器同步工具.简单来说就是当你保存文件的同时浏览器自动刷新网页,省去了手动的环节,大大的节省了开发时间,这个工具是基于nodejs的,可以通过npm安装,不在 ...
 - Excel 按模板格式导出
			
最近遇到一个问题,就是导出数据的时候需要自定义的表头,如图 如果自己用代码写表头的话,可能会有点复杂,而且代码量很多,所以我就想了一个办法,直接在Excel里面把表头定义好,然后把数据写入Excel模 ...
 - 学习Jammendo代码的心路历程(二)ViewFlipper数据的填充
			
打开Jammendo进入到首页之后,会看到这样一个界面.可以看到下左效果,我们可以看到,他是上部分的ViewFlipper模块和下半部分的listview模块构成的,今天就简单的说一下Jammendo ...
 - javaScript对象学习笔记(一)
			
一.什么是对象 对象: JavaScript的一种基本数据类型 对象是属性的无序集合,每个属性都是一个名/值对 JavaScript中的事物都是对象:字符串.数值.数组.函数... JavaScrip ...
 - State模式学习笔记
			
选用了一个假设需要用户验证的例子进行State模式学习,这个例子并不恰当.无所谓了,只要能学习到其中的内容即可. 适用性: 1,一个对象的行为取决于他的状态,并且它必须在运行时刻依据状态改变他的行为. ...
 - 数据库习题(oracle)
			
学生表 Student 字段值分别是 Sid ,Sname ,Sage ,Ssex 教师表 Teacher 字段值分别是 Tid ,Tname 课程表 Course 字段值分别是Cid ,Cname ...
 - JavaScript基础学习(一)—JavaScript简介
			
一.JavaScript概述 JavaScript是一种专为与网页交互的脚本语言,由三部分组成. ECMAScript 核心,提供核心语言功能. BO ...