`
JavaSam
  • 浏览: 950190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

处理JSON的有效工具类

 
阅读更多
jquery插件
(function ($) {
    var m = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        s = {
            'array': function (x) {
                var a = ['['], b, f, i, l = x.length, v;
                for (i = 0; i < l; i += 1) {
                    v = x[i];
                    f = s[typeof v];
                    if (f) {
                        v = f(v);
                        if (typeof v == 'string') {
                            if (b) {
                                a[a.length] = ',';
                            }
                            a[a.length] = v;
                            b = true;
                        }
                    }
                }
                a[a.length] = ']';
                return a.join('');
            },
            'boolean': function (x) {
                return String(x);
            },
            'null': function (x) {
                return "null";
            },
            'number': function (x) {
                return isFinite(x) ? String(x) : 'null';
            },
            'object': function (x) {
                if (x) {
                    if (x instanceof Array) {
                        return s.array(x);
                    }
                    var a = ['{'], b, f, i, v;
                    for (i in x) {
                        v = x[i];
                        f = s[typeof v];
                        if (f) {
                            v = f(v);
                            if (typeof v == 'string') {
                                if (b) {
                                    a[a.length] = ',';
                                }
                                a.push(s.string(i), ':', v);
                                b = true;
                            }
                        }
                    }
                    a[a.length] = '}';
                    return a.join('');
                }
                return 'null';
            },
            'string': function (x) {
                if (/["\\\x00-\x1f]/.test(x)) {
                    x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                        var c = m[b];
                        if (c) {
                            return c;
                        }
                        c = b.charCodeAt();
                        return '\\u00' +
                            Math.floor(c / 16).toString(16) +
                            (c % 16).toString(16);
                    });
                }
                return '"' + x + '"';
            }
        };

	$.toJSON = function(v) {
		var f = isNaN(v) ? s[typeof v] : s['number'];
		if (f) return f(v);
	};
	
	$.parseJSON = function(v, safe) {
		if (safe === undefined) safe = $.parseJSON.safe;
		if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))
			return undefined;
		return eval('('+v+')');
	};
	
	$.parseJSON.safe = false;

})(jQuery);

 原生js

if (typeof JSON !== 'object') {
    JSON = {};
}

(function() {
    'use strict';

    function f(n) {
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function(key) {

            return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null;
        };

        String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(
        key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap, indent, meta = { // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"': '\\"',
            '\\': '\\\\'
        },
        rep;

    function quote(string) {

        escapable.lastIndex = 0;
        return escapable.test(string) ? '"' + string.replace(escapable, function(a) {
            var c = meta[a];
            return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
        }) + '"' : '"' + string + '"';
    }

    function str(key, holder) {

        var i, // The loop counter.
        k, // The member key.
        v, // The member value.
        length, mind = gap,
            partial, value = holder[key];

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

            return String(value);

        case 'object':

            if (!value) {
                return 'null';
            }

            gap += indent;
            partial = [];

            if (Object.prototype.toString.apply(value) === '[object Array]') {

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

                v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    if (typeof rep[i] === 'string') {
                        k = rep[i];
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

                for (k in value) {
                    if (Object.prototype.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

            v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function(value, replacer, space) {

            var i;
            gap = '';
            indent = '';

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

            } else if (typeof space === 'string') {
                indent = space;
            }

            rep = replacer;
            if (replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

            return str('', {
                '': value
            });
        };
    }

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function(text, reviver) {

            var j;

            function walk(holder, key) {

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.prototype.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }

            text = String(text);
            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function(a) {
                    return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
           

 }


            if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

                j = eval('(' + text + ')');

                return typeof reviver === 'function' ? walk({
                    '': j
                }, '') : j;
            }

            throw new SyntaxError('JSON.parse');
        };
    }
}());

 

0
3
分享到:
评论

相关推荐

    json 转化工具类

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端数据传输。...在实际开发中,根据项目的依赖和需求,选择合适的JSON库并利用其提供的工具类,可以有效地处理JSON数据。

    json解析工具类

    1. **JSON有效性校验**:工具类应具备检查JSON字符串是否符合JSON规范的能力。这可以通过调用JSON库提供的解析方法来实现,如果解析过程中没有抛出异常,那么我们可以认为JSON字符串是有效的。 2. **解析JSON到Java...

    json-lib 解析json串工具类

    这个工具类“json-lib 解析json串工具类”就是专门为了解析JSON字符串而设计的,它能够帮助开发者有效地将JSON数据转换为Java对象,反之亦然。 1. **JSON对象与Java对象的映射** `json-lib`库支持将JSON对象转换为...

    C#解析Json工具LitJson

    LitJson是C#编程语言中一个轻量级的Json解析库,主要用来处理Json格式的数据。Json(JavaScript Object Notation)是一种轻量级的数据交换...在开发过程中,理解并熟练掌握它的使用,能够帮助你更有效地处理Json数据。

    json工具类源代码

    在实际开发中,使用JSON工具类时,常见的操作包括: - **序列化**:将Java对象转换为JSON字符串,这在发送HTTP请求或保存数据到文件时非常有用。 - **反序列化**:将JSON字符串解析为Java对象,便于在程序中使用...

    JSON对象转换工具类

    `JsonUtils`工具类提供了简单而强大的功能,可以有效地帮助开发者在Java项目中处理JSON数据。通过合理使用这两个方法,可以极大地提高开发效率,减少手动处理JSON数据的工作量。同时,需要注意确保JSON字符串和Java...

    jsonview工具

    标题中的"jsonview工具"是指专门用于查看和处理JSON数据的工具。这类工具通常提供友好的界面,帮助用户清晰地呈现复杂的JSON结构,并能辅助识别和修复潜在的语法错误。 描述中提到的“查看json串工具”意味着JSON...

    工具类,根据给定长度,使用递归的方式拆分一个json成为多个json组成的列表

    在IT行业中,处理JSON数据是常见的任务之一,特别是在Java编程中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当我们面临大量JSON数据时,有时...

    map,list转成json的工具类

    在Java开发中,数据转换是常见的操作之一,特别是在处理JSON格式的数据时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛应用于Web服务和前后端交互。本篇将详细介绍如何使用两个Java工具...

    一款很好用的JSON工具

    在处理JSON数据时,一个好用的工具至关重要,能够帮助开发者快速理解、验证和操作JSON结构。 标题中的“一款很好用的JSON工具”指的是专门设计用于处理JSON数据的软件或在线平台。这样的工具通常提供友好的用户界面...

    json字符串解析工具

    总的来说,JSON字符串解析工具,如HiJson 2.1.2_jdk64.exe,是开发和调试过程中不可或缺的工具,它们帮助我们更好地理解和处理JSON数据,从而提高工作效率。无论你是前端开发者、后端开发者还是数据分析师,掌握这类...

    JSON 解析工具

    在实际使用中,这样的工具不仅可以帮助开发者调试API,也可以用于查看和修改配置文件,或者在处理JSON格式的日志时进行数据提取。通过公开源代码,这款工具为开发者提供了自定义和扩展的可能性,例如添加新的解析...

    json显示工具

    通过熟练使用这类工具,开发者可以更有效地处理JSON数据,提高工作效率,降低错误发生的可能性。因此,了解并掌握一款好的JSON显示工具,对于从事Web开发或与JSON数据打交道的人员来说至关重要。

    json格式解析工具

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一个...了解和熟练使用这类工具可以提高工作效率,减少错误,使得处理JSON数据变得更加便捷。

    java对象转json工具类

    ### Java对象转JSON工具类详解 #### 一、引言 在现代软件开发过程中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛使用。它基于JavaScript的一个子集,采用完全独立于编程语言的文本...

    json着色工具(支持远程调用,本地json字符串)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间的数据传输。...对于处理JSON数据的初学者和经验丰富的开发者而言,这类工具都是日常工作中的一大助手。

    VB6 处理Json数据源码

    3. **cStringBuilder.cls**:在VB6中,字符串操作往往不如现代语言那么高效,`cStringBuilder` 类可能提供了更有效的字符串构建功能,这对于大量处理字符串(如生成JSON字符串)非常有用。 4. **VBJSON.exe**:这...

    java解析json格式数据 json.jar

    3. **JSONParser**:这是解析JSON数据的主要工具类,它提供了`parse()`方法,可以从JSON格式的字符串或输入流中解析出JSON对象或数组。 4. **JSONStringer** 和 **JSONWriter**:这两个类用于生成JSON格式的字符串...

    Gdata Json 解析工具

    Gdata JSON解析工具则是一个专门处理JSON数据的第三方库,它为开发者提供了在编程环境中解析和生成JSON的有效手段。 Gdata JSON库最初是由Google开发的,主要面向C++程序员,它提供了一系列API,使得开发者可以方便...

    json数据转换C#实体类工具

    此工具对于频繁处理JSON数据的C#开发者来说是一个非常有价值的辅助工具,它消除了手动编写和维护实体类的繁琐工作,使开发过程更加流畅高效。不过,需要注意的是,由于JSON格式的灵活性,某些复杂的JSON结构可能无法...

Global site tag (gtag.js) - Google Analytics