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. wcf、web api、webservicer 之间的区别

    名次注解 SOAP 简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议,是交换数据的一种协议规范,是一种轻量的.简单的.基于XML(标准通用标记语言下的一个子集)的协议,它被设计成 ...

  2. Linux-ubuntu安装过程讲解

    前言也不准备介绍Linux是什么,为什么要安装ubuntu?相信你能够看到这篇文章也知道自己想要做什么. 一,准备工具 1.VMwareWorkstation虚拟机 下载地址:https://my.v ...

  3. css3 loading

    http://jsbin.com/vonuni/2/edit?html,css,output

  4. Linux中的sed命令

    sed - stream editor for filtering and transforming text 流编辑器的过滤和转换文本 sed [-nerf] [动作] 参数: -i 修改源文件 危 ...

  5. 安装IPython攻略

    由于对python自带的idle不太满意,看到有介绍说ipython不错,于是想装一个试试. 机器上该装的扩展包都已经装好了,比如setuptools,matplotlib,环境变量配置,所以安装起来 ...

  6. 初识Object-C

    Object-C是苹果推出用来开发苹果软件的一门编程语言.大学学了3年的JAVA,到了大四毅然决然的放弃JAVA,是因为第一次接触Object-C就被它的简单语法吸引了.其实不仅仅是语法简单,相对于A ...

  7. [SinGuLaRiTy] 树形存储结构阶段性测试

    [SinGuLaRiTy-1011] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. G2019级信息奥赛专项训练 题目 程序名 时间 内存 ...

  8. [SinGuLaRiTy] 平衡树

    [SinGuLaRiTy-1009] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 二叉查找树 二叉查找树是指具有下列性质的非空二叉树: ⑴ ...

  9. Java集合常见面试题集锦

    1.介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List.Set.Map.Queue三大数据结构.它们在Java中的结构关系如下: Collection接口 ...

  10. Codeforces 392C Yet Another Number Sequence (矩阵快速幂+二项式展开)

    题意:已知斐波那契数列fib(i) , 给你n 和 k , 求∑fib(i)*ik (1<=i<=n) 思路:不得不说,这道题很有意思,首先我们根据以往得出的一个经验,当我们遇到 X^k ...