jsonchk

1.0.5 • Public • Published

JSON Struct Checker (for NodeJS)

1. 说明

这是一个对JSON数据(或其他JS对象)的数据结构进行校验的函数。 在编程过程中,可以通过编写一个JSON结构的Schema,来表示你所预期的数据结构,然后使用该函数对目标进行检查。 函数会返回Boolean类型的检查结果;如果检查未通过,函数会形成一个Array结构的日志文件供调试审阅。

用于Web的Repo: https://github.com/imnull/json-struct-checker

2. 安装

npm install jsonchk

npm上的项目地址:https://npmjs.org/package/jsonchk

3. 示例

示例代码请参看:https://github.com/imnull/jsonchk/blob/master/test.js

3.1 类型判断

3.1.1 类型字符串比对

//数据中应具备一个名为name,值的typeof为string的属性
var schema = { name : 'string' };
var data = { name : 'MK' };

//数据中应具备一个名为days,Object.prototype.toString回调其值为[object Array]的属性
var schema = { days : '[object Array]' };
var data = { days : [1,2,3] };

3.1.2 类型字符串的正则比对

//值类型为string或Array
var schema = { name : '/^(string|\[object Array\])$/' };
var data1 = { name : 'MK' };
var data2 = { name : ['MK'] };

3.2 函数对值的判断

var schema = {
  age : function(val){
    return typeof(val) == 'number' && val >= 0 && val <= 120;
  }
};

var data1 = { age : 24 };
var data2 = { age : -1 };

3.3 嵌套判断

var schema = {
  child : {
    name : 'string',
    age : 'number',
    wife : '^(undefined|\[object Object\])$'
  }
}
var data1 = {
  child : {
    name : 'Even',
    age : 6
  }
}
var data2 = {
  child : {
    name : 'John',
    age : 55,
    wife : {
      //...
    }
  }
}

4. 特殊字符

4.1 特殊类型字符

4.1.1 "*" 允许所有类型

var schema = { style : '*' };
var data1 = { style : "width:20px" };
var data2 = { style : { width : '20px' } }
var data3 = {};

4.2 特殊引用字符

4.2.1 "@" 引用父级schema进行检测

var schema = {
  name : 'string',
  age : 'number',
  wife : '@'
}

var data1 = {
  name : 'John',
  age : 55
}

var data2 = {
  name : 'Li Lei',
  age : 24,
  wife : {
    name : 'Han Meimei',
    age : 23
  }
}

5. 关于log参数

该参数为外部引用变量,类型为数组。如果代入该引用,那么当检查出现错误时,会向此参数推入一条记录。一条记录为一个数组,按顺序为: namespace, error-type, error-description, current-checker, current-value

6. 关于namespace参数

表述出错时的层级关系

Readme

Keywords

none

Package Sidebar

Install

npm i jsonchk

Weekly Downloads

0

Version

1.0.5

License

MIT

Last publish

Collaborators

  • imnull