Tool set for JSON object.
Node.js:
npm install jsonkit
bower:
bower install jsonkit
Browser:
<script src="/pathTo/jsonkit.js"></script>
迭代器,对数组或者对象的键值进行迭代。
- obj:
Array
或Object
- iterator:
Function
,function (value, key, obj) {} - context:
Object
, 绑定至iterator
的this
值 - arrayLike: Boolean, 为
true
时按数组迭代,为false
则按对象迭代,否则自动判断 - right:
Boolean
, 如果是按数组迭代,这里指定是否反向迭代
JSONKit.each([1, 2, 3, 4, 5], function (value, index, list) {
console.log('each', value, index, list);
});
JSONKit.each({a: 1, b: 2, c: 3}, function (value, index, list) {
console.log('each', value, index, list);
});
属性复制,将 obj1、obj2、...objx 的属性复制到 obj,对于同名属性,后者覆盖前者,返回 obj。
var obj = {a: 3, b: 4, c: 5};
console.log('extend', JSONKit.extend(obj, {a: 0, d: []}, {e: 6}));
深度并集复制,用于数据深克隆,将 obj1、obj2、...objx 的属性深度复制到 obj,对于同名属性,后者覆盖前者,返回 obj。当只有一个参数 obj 时,则对 obj 进行深度复制,返回新的复制对象。
- obj:
Array
或Object
,当 objx 类型与 obj 不一致时,自动忽略。
var d = [1, 2, {a: 3, b: 4, c: 5}];
console.log('union', JSONKit.union(d));
console.log('union', JSONKit.union(d, [0, 0, {a: 0}]));
深度交集复制,用于数据深过滤,将 obj1、obj2、...objx 共同具有的且类型相同的属性值深度复制到 obj,后者覆盖前者,返回 obj。
- obj:
Array
或Object
,当 objx 类型与 obj 不一致时抛出错误。
var e = [0, '', {a: 0, b: false, c: null}];
console.log('intersect', JSONKit.intersect(e, [9, 9, {a: 9, c: {}}]));
情况1: 当 obj 中属性/子属性值为空对象或空数组时,表示接受任意对象或任意数组:
e = {a: {}, b: []};
console.log('intersect', JSONKit.intersect(e, {a: {a: 1, b:2, c: [1, 2]}, b: [1, 2, {a: 3}]}));
情况2: 当 obj 中属性/子属性值为数组且长度为 1 时,表示接受任意长度的数组,但数组值必须为指定类型,不合法数据自动忽略:
e = {a: [0]};
console.log('intersect', JSONKit.intersect(e, {a: [1, 2, '3', 4]}));
情况3: 当 obj 中属性/子属性值为数组且长度大于 1 时,表示接受定长的数组,但数组值类型必须与对应位置的类型一致,不合法数据被赋值为 null
:
e = {a: [0, 0, 0, 0, 0]};
console.log('intersect', JSONKit.intersect(e, {a: [1, 2, '3', 4]}));
情况4: 当 obj 中属性/子属性值为 null
时,表示接受任意类型的数据:
e = {a: null};
console.log('intersect', JSONKit.intersect(e, {a: {a: 1, b:2, c: [1, 2]}}));
对 a, b 进行深度对比,判断他们是否相等,返回 Boolean
值。
- a: Any
- b: Any
- depth: 可选,指定比较的最大深度,超过时将抛出错误,默认为
20
或setMaxDepth
的设置值。
var a = {a: 1, b: 2, c: 3, d: [1, 2, 3], e: null};
var b = {a: 1, b: 2, c: 3, d: [1, 2, 3], e: null};
console.log('isEqual', JSONKit.isEqual(a, b));
判断对象是否为空,返回 Boolean
值,对于非对象,返回 true
。
- obj: Any
console.log('isEmpty', JSONKit.isEmpty([]));
console.log('isEmpty', JSONKit.isEmpty({}));
判断是否为数组,返回 Boolean
值。
- obj: Any
console.log('isArray', JSONKit.isArray([]));
console.log('isArray', JSONKit.isArray({}));
判断是否为纯对象,返回 Boolean
值。
- obj: Any
console.log('isObject', JSONKit.isObject({}));
console.log('isObject', JSONKit.isObject([]));
console.log('isObject', JSONKit.isObject(new Date()));
删除 list 中的所有 item,直接修改 list 自身,返回已删除 item 的数量。
-
list:
Array
或Object
-
item: Any, 当 item 为函数时,会调用该函数
item(value, index)
如果其返回值为
true
,则删除 list 中的对应值。 -
arrayLike:
Boolean
, 为true
时按数组迭代,为false
则按对象迭代,否则自动判断
var a = [1, 2, 3, null, null];
console.log('removeItem', JSONKit.removeItem(a, null), a);
var b = {a: 1, b: 2, c: 3, d: null, e: null};
console.log('removeItem', JSONKit.removeItem(b, null), b);
从 list 中找出目标值。
- list:
Array
或Object
- fn: 断言函数,该函数有三个参数:list 子元素的值、键和 list 自身,如果 fn 返回
true
,则为找到目标值,立即返回目标值,不再往后迭代。 - arrayLike:
Boolean
, 为true
时按数组迭代,为false
则按对象迭代,否则自动判断
a = [1, 1, 2, 3, '1', null, null];
JSONKit.findItem(a, function (x, i) {
return typeof v === 'string';
}); // '1'
删除 array 中的重复值,仅对原始类型有效,直接修改 array 自身,返回 array。
- array:
Array
var c = [1, 2, 3, 4, 3, 2];
console.log('uniqueArray', JSONKit.uniqueArray(c), c);
console.log('JSONKit.toNum("1.5w")', JSONKit.toNum('1.5w')); // 1.5
console.log('JSONKit.toNum(undefined)', JSONKit.toNum(undefined)); // Nan
console.log('JSONKit.toNum(100)', JSONKit.toNum(0)); // 100
console.log('JSONKit.toNum(NaN)', JSONKit.toNum(NaN)); // NaN
console.log('JSONKit.toNum(true)', JSONKit.toNum(true)); // NaN
console.log('JSONKit.toStr(null)', JSONKit.toStr(null)); // ''
console.log('JSONKit.toStr(undefined)', JSONKit.toStr(undefined)); // ''
console.log('JSONKit.toStr(0)', JSONKit.toStr(0)); // '0'
console.log('JSONKit.toStr(NaN)', JSONKit.toStr(NaN)); // 'NaN'
console.log('JSONKit.toStr(true)', JSONKit.toStr(true)); // 'true'
解析 JSON 字符串 string,返回解析值,如果 string 不是标准 JSON,不可解析,则返回 undefined
。
- string:
String
console.log('parseJSON', JSONKit.parseJSON('{}')); // {}
console.log('parseJSON', JSONKit.parseJSON('1')); // 1
console.log('parseJSON', JSONKit.parseJSON('"1"')); // '1'
console.log('parseJSON', JSONKit.parseJSON('a')); // undefined
console.log('parseJSON', JSONKit.parseJSON('null')); // null
console.log('parseJSON', JSONKit.parseJSON('undefined')); // undefined
设置 union
或 intersect
中允许的对象最大深度,超过时将抛出错误,用于防止对象循环自引用,默认为 20,最小为 5,最大为 1000,返回当前最大深度值。
- depth: Number