首页 > web前端 > js教程 > 正文

浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)_jquery

WBOY
发布: 2016-05-16 17:29:29
原创
1213 人浏览过

首先,准备新建一个js文件。以下是JSON2.js的内容,把内容拷到js文件中,以便调用:

复制代码 代码如下:

/*
    http://www.JSON.org/json2.js
    公共领域。
    没有明示或暗示的保证。使用风险自负。
    请参阅 http://www.JSON.org/js.html
    在部署之前应缩小此代码。
    请参阅 http://javascript.crockford.com/jsmin。 html
    使用您自己的副本。从您无法控制的服务器加载代码是极其不明智的。
    此文件创建一个全局 JSON 对象,其中包含两个方法:stringify
    和 parse。
        JSON.stringify(value, replacementr, space )
            value       任何 JavaScript 值,通常是对象或数组。
            替换符    一个可选参数,用于确定对象
                        对象值的字符串化方式。它可以是
                        函数或字符串数​​组。
            空格       一个可选参数,指定嵌套结构的缩进
                        。如果省略,文本将
                        被打包,没有额外的空格。如果它是一个数字,
                        它将指定每个
                        级别缩进的空格数。如果它是字符串(例如 't' 或 ' '),
                        它包含用于在每个级别缩进的字符。
            此方法从 JavaScript 值生成 JSON 文本。
             当对象找到 value 后,如果对象包含 toJSON
            方法,则会调用其 toJSON 方法,并将结果
            字符串化。 toJSON 方法不会序列化:它返回由应序列化的名称/值对表示的
            值,
            如果不应该序列化任何内容,则返回未定义的值。 toJSON 方法
            将传递与值关联的键,这将
            绑定到值
            例如,这会将日期序列化为 ISO 字符串。
                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // 将整数格式化为至少有两位数。
                        return n                     }
                    return this.getUTCFullYear()   '-'
                        f(this.getUTCMonth() 1) '-'
                         f(this.get UTCDate())      'T'
                         f(this.getUTCHours( ))     ':'
                         f(this.getUTCMinutes())   ':'
                         f(this.getUTCSeconds())   'Z';
                };
            您可以提供可选的替换方法。它将传递每个成员的
            键和值,并将其绑定到包含的
            对象。从您的方法返回的值将被序列化
           。如果您的方法返回未定义,则该成员将
            被排除在序列化之外。
            如果replacer 参数是字符串数组,则它将
            用于选择要序列化的成员。它会过滤结果
           ,以便只有具有替换数组中列出的键的成员
            字符串化。
            没有 JSON 表示形式的值,例如未定义或
            函数,将不会被序列化。对象中的此类值将被删除
           ;在数组中,它们将被替换为 null。您可以使用
            替换函数将其替换为 JSON 值。
            JSON.stringify(undefined) 返回未定义。
            可选的 space 参数生成
            值的字符串化,并用换行符填充和缩进,使其
            更易于阅读。
            如果空格参数是非空字符串,则该字符串将
            用于缩进。如果 space 参数是数字,则
            缩进将是那么多空格。
            示例:
            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // 文本为 '["e",{"pluribus":"unum"}]'
            text = JSON.stringify(['e', {pluribus: 'unum'}], null, 't ');
            // 文本为 '[nt"e",nt{ntt"pluribus": "unum"nt}n]'
            text = JSON.stringify([new Date()], function ( key, value) {
                返回 this[key] instanceof Date ?
                    'Date(' this[key] ')' : value;
            });
            // text is '["Date(---current time---)"]'
        JSON.parse(text, reviver)
            此方法解析 JSON 文本以生成对象或数组。
            它可以抛出 SyntaxError 异常。
            可选的 reviver 参数是一个可以过滤和
            转换结果的函数。它接收每个键和值,
            并使用其返回值代替原始值。
            如果它返回收到的内容,则结构不会被修改。
            如果它返回未定义,则成员已删除。
            示例:
            // 解析文本。看起来像 ISO 日期字符串的值将
            // 转换为 Date 对象。
            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === '字符串') {
                    a =
/^(d{4})-(d{2})-(d{2})T(d{2}):(d{2 }):(d{2}(?:.d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC( a[1], a[2] - 1, a[3], a[4],
                            a[5], a[6]));
                   }
                }
                返回值;
            } );
            myData = JSON.parse('["日期(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === ' string' &&
                        value.slice(0, 5) === '日期(' &&
                       value.slice(-1) === ')') {
                    d = 新日期(值。 slice(5, -1));
                    if (d) {
                       return d;
                    }
                }
                返回值;
            });
    这是一个参考实现。您可以自由复制、修改或
    重新分发。
*/
/*jslint 邪恶: true, strict: false, regexp: false */
/*members "", "b" , "t", "n", "f", "r", """, JSON, "\", apply,
    调用, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds , hasOwnProperty, join,
    lastIndex, length, parse, prototype, Push, Replace, slice, stringify,
    test, toJSON, toString, valueOf
*/
// 仅创建 JSON 对象我们在闭包中创建
//方法以避免创建全局变量。
if (!this.JSON2)
{
    this.JSON2 = {};
}
(function () {
    "use strict";
    function f(n) {
        // 将整数格式化为至少有两位数。
        return 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 = /[u0000u00adu0600-u0604u070fu17b4u17b5u200c-u200fu2028-u202fu2060-u206fuffeffufff0-uffff]/g,
        可转义 = /[\"x00-x1fx7f-x9 fu00adu0600-u0604u070fu17b4u17b5u200c-u200fu2028-u202fu2060-u206fufeffufff0-uffff]/g,
        间隙,
        缩进,
        meta = {    // 字符替换表
            'b': '\b',
            '\t',
            'n ': '\n',
            'f': '\f',
            'r': '\r',
            '"' : '\"',
            '\': '\\'
        },
        代表;
    function quote(string) {
        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' 字符串.replace(可转义, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\u' ('0000' a.charCodeAt(0).toString(16)).slice(-4);
            }) '"' :
            '"' 字符串 '" ';
    }
    function str(key,holder) {
        var i,          // 循环计数器。
            k,          // 成员键。
            v,          // 成员值。
            长度,
            心灵 = 间隙,
            部分,
            value =holder[key];
        if (value && typeof value === 'object' &&
                typeof value.toJSON === '功能') {
            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';
            }
            间隙 = 缩进;
            部分 = [];
            if (Object.prototype.toString.apply(value ) === '[对象数组]') {
                length = value.length;
                for (i = 0; i                    partial[i] = str(i, value) || 'null';
                }
                v =partial.length === 0 ? '[]' :
                    间隙? '[n' 间隙
                           partial.join(',n' 间隙) 'n'
                               头脑 ']' :
                          '['partial.join(',') ']';
间隙=头脑;
                return v;
            }
            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i                     k = rep[i];
                   if (typeof k === 'string') {
                       v = str(k, value);
                        if (v) {
                           partial.push(quote(k ) (间隙 ? ': ' : ':') v);
                       }
                   }
                }
            } else {
                for (k 值) {
                    if (Object. hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                       if (v) {
                            部分。推(引用(k)(间隙?':':': ') v);
                       }
                   }
               }
            }
           v = 部分. 长度 === 0 ? '{}' :
                间隙? '{n'间隙partial.join(',n'间隙)'n'
                       头脑'}':'{'partial.join(',')'}';
           间隙=头脑;
            return v;
        }
    }
    if (typeof JSON2.stringify !== 'function') {
        JSON2.stringify = 函数(值、替换符、空格){
            var i ;
            间隙 = '';
             缩进 = '';
            if (typeof space === 'number') {
                for (i = 0; i                     缩进 = ' ';
                }
            } else if (typeof space === 'string') {
                缩进 = 空格;
           }
           rep = 替换器;
            if (替换器 && 替换器类型 !== '函数' &&
                    (替换器类型 !== '对象' ||
                     typeof replacement.length !== 'number' )) {
                throw new Error('JSON2.stringify');
            }
            return str('', {'': value});
        };
    }
if (typeof JSON2.parse !== 'function') {
        JSON2.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.hasOwnProperty.call (值, k)) {
                            v = walk(value, k);
                          if (v !== undefined) {
                               value[k] = v;
                            } else {
                                删除值[ 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(/"[^"\nr]*"|true|false|null|-?d (?:.d*)?(?:[eE][ -]?d )?/g, ']')
.replace(/(?:^|:|,)(?:s*[) /g, ''))) {
                j = eval('(' text ')');
                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }
            throw new SyntaxError('JSON2.parse');
        };
    }
}());

第二、调用页的内容
注意:调用js文件的路径需要自己调整,这点如果不会,那就别再继续看了。
复制代码 代码如下:

  
   
        var a = '{ "name": "tom", "sex": "男", "age": "24" }';    // 用于组成json的字符串;
        alert("用于组成json的字符串:【" a "】");
        var b = JSON2.parse(a);   // 把字符串a转换为json格式b
        var c = JSON2.stringify(a); //把json格式b转换为字符串c
        alert("转换后的字符串:【" c "】");
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板