数据转换d2d.js-把数据以jsonSchema或jsonSymbol风格转换为我们想要的数据

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"
	          }
	      }
	]
};
posted @ 2017-05-08 14:31  天凉  阅读(284)  评论(0编辑  收藏  举报