jquery parseJSON()方法解析json字符串

在web项目开发中,前端经常需要接收后端传送来的json数据,解析json字符串,再对页面进行渲染。使用jquery解析json字符串通常需要将json字符串转化为javascript的json对象(如果使用getjson()方法则不用,得到到就是json对象)。通常使用$.parseJSON()方法解析json字符串,也可以使用eval()方法。两者的区别是,parseJSON()不会解析错误格式的json字符串,而eval则会解析任意字符串,所以eval()是不安全的。

那么接下来我们就来看看如何使用$.parsejson()解析json字符串:
使用一段标准json字符串做为测试用例
{
“name”: “jack”,
“age”: 11,
“sex”: “man”,
“phone”: 28770
}
js代码:

$(function(){
    var data = "{\"name\":\"jack\" ,\"age\": 11, \"sex\": \"man\" ,\"phone\":288770}";   //双引号转义
    var jsondata = $.parseJSON(data);
    console.info(jsondata);
    console.info("姓名:"+jsondata.name);
    console.info("年龄:"+jsondata.age);
    console.info("性别:"+jsondata.sex);
    console.info("电话:"+jsondata.phone);
});

我们通过chorm浏览器控制台查看打印的结果:
jquery parseJSON()方法解析json字符串_第1张图片
可以看到,var jsondata = $.parseJSON(data)这行代码将json字符串转化为了一个Object对象,json字符串内的键名成为了Object对象的属性名,我们就可以使用jsondata.name这样的形式来获取对应的值。

如果我们解析的json字符串是json数组的形式,则有所不同,如:
json数组字符串:
[{
“name”: “jack”,
“age”: 11,
“sex”: “man”,
“phone”: 28770
},
{
“name”: “tom”,
“age”: 11,
“sex”: “man”,
“phone”: 28771
},
{
“name”: “marry”,
“age”: 11,
“sex”: “woman”,
“phone”: 28772
}
]

    var jsondata = $.parseJSON(data);
    console.info(jsondata);
    console.info("姓名:"+jsondata[0].name);
    console.info("年龄:"+jsondata[0].age);
    console.info("性别:"+jsondata[0].sex);
    console.info("电话:"+jsondata[0].phone);

打印的结果为一个数组,数组的每一个元素都是一个Object对象,我们取值时就要写成jsondata[0].name的形式。
jquery parseJSON()方法解析json字符串_第2张图片


最后再来看看parseJSON的源码(中文是自己注释的):
parseJSON: function( data ) {
        //如果参数为空或参数类型不是string,则返回null
        if ( !data || typeof data !== "string") {
            return null;
        }

        // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = jQuery.trim( data );//去掉字符串首尾空格

        // Attempt to parse using the native JSON parser first
        //使用浏览器提供的解析json函数解析json字符串
        if ( window.JSON && window.JSON.parse ) {
            return window.JSON.parse( data );
        }

        // Make sure the incoming data is actual JSON
        // Logic borrowed from http://json.org/json2.js
/*使用正则表达式判断json字符串格式是否正确
rvalidchars = /^[\],:{}\s]*$/,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-? (?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g
*/
        if ( rvalidchars.test( data.replace( rvalidescape, "@" )
            .replace( rvalidtokens, "]" )
            .replace( rvalidbraces, "")) ) {
   //使用原生的js Function()方法解析json字符串
            return ( new Function( "return " + data ) )();

        }
        jQuery.error( "Invalid JSON: " + data );
    }

你可能感兴趣的:(前端开发)