JSON Deserializer
安装
JSON Deserializer 使用 moment 处理 JSON 数据中的日期字符串。
npm install json-deserializer
为什么开发这个库?
在大型 SPA 应用开发中,前后端数据交互基本都是基于 JSON 的。如果后端使用的是强类型语言(比如 Java ),在获取到前端传递的 JSON 数据的时候,一般会反序列化为某个(或某几个)类的对象,以便后续处理。
那么前端在拿到后端传递的 JSON 数据的时候,由于 JavaScript 对 JSON 天然友好的支持,所以很多时候可以直接 JSON.parse(jsonString)
一下就可以使用了。但是后端开发者很多时候对 JSON 数据理解的不一样,或者强类型语言操作 JSON 很麻烦,造成传递给前端的 JSON 数据总是不尽人意,此时就少不了对后端数据做 normalize 了。
如何使用?
JSON Deserializer 的输入是一个 JSON 对象,输出是一个 JavaScript 对象。
API
deserialize(jsonObject, config, options)
反序列化 JSON 对象。
-
参数
jsonObject
JSON 对象config
schema 配置options
选项配置option.noCircular
boolean
是否支持反序列化循环引用对象。如果是true
,则遇到循环引用就会抛出异常;如果是false
,则会自动跳过循环引用部分。默认true
。option.inputFirst
boolean
是否优先按照输入对象的数据结构进行遍历处理。默认true
。
-
返回值
JavaScript 对象。
使用示例
- 转换 JSON 数组
; const jsonObject = 20;const schema = StringParser;; // result: ['20']
- 转换 JSON 对象
; const jsonObject = "name": "yibuyisheng" "age": 20;const schema = name: StringParser;; // result: {name: 'yibuyisheng'}
- 转换 JSON 基本类型
; const jsonObject = 'yibuyisheng';const schema = StringParser;; // result: 'yibuyisheng'
validate(obj, config, option)
校验 JS 对象。
-
参数
obj
JS 对象config
schema 配置options
选项配置option.noCircular
boolean
是否支持反序列化循环引用对象。如果是true
,则遇到循环引用就会抛出异常;如果是false
,则会自动跳过循环引用部分。默认false
。option.inputFirst
boolean
是否优先按照输入对象的数据结构进行遍历处理。默认false
。option.all
boolean
是否一次性搜集对象上所有不合法的属性信息。默认false
。option.flattenResult
boolean
是否将搜集到的错误信息打平。默认false
。
-
返回值
共有三种情况:
true
校验成功,没有非法数据。FlattenResult
当option.flattenResult
设为true
是,如果校验有错,则错误信息会被打平成一个数组,每个数据项都会带有固定属性。any
其余类型数据,跟obj
参数的结构一致,叶子节点上都会包含相应数据的校验结果。
使用示例
- 校验原始数据
; ; // result: true ;// result:// {// detail: [// {// message: '请填写',// name: 'required'// }// ],// keyPath: [],// message: 'Validate fail with VEUI rules.',// }
- 校验对象
; ; // result: {name: true}
- 拿到打平的结果
; ;// result:// [// {// keyPath: ['name'],// result: {// detail: [{message: '格式不符合要求', name: 'pattern'}],// keyPath: ['name'],// message: 'Validate fail with VEUI rules.'// }// }// ]
License
Changelog
v0.0.6
💡 主要变更
- [+] 支持 shouldIgnoreUndefined 配置。
v0.0.5
💡 主要变更
- [+] 支持
inputFirst
配置,即以被处理对象的数据结构为准,还是以配置对象的数据结构为准。
v0.0.4
💡 主要变更
- [+] 在 index.js 中导出模块。
v0.0.3
💡 主要变更
- [+] 新增校验器,可以对 JS 对象进行全方位校验,支持检测包含循环引用的对象。
- [+] 支持检测带有循环引用的 JSON 对象。
v0.0.2
💡 主要变更
- [+] 支持对 JSON 对象的 normalize 。