之前一直把JSON想做一种数据类型,通过这几天的使用,发现其实JSON只是一种数据的格式,而与int string double等等数据类型是有本质的区别。
JSON(JavaScript Object Notation)是JavaScript编程语言的一个子集。正因为JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中。
就像初高中的课本一样,想要掌握一样新技术、新知识,我们首先要掌握它的意义,也就是它存在的价值。
JSON之所以能够广泛使用,与js的重要性提升不无关系。如果我们按照JSON的格式定义了一个对象,那么我们就可以通过对象名.键名来过去其中的数据。
我将JSON的使用分为两个部分
1、将其他数据类型转换为JSON
1.1 首先提到的是JSON官方提到的方法:JSON.stringify();
语法
JSON.stringify(value[, replacer [, space]])
参数
value
- 将要序列化成 JSON 字符串的值。
replacer
可选- 如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被 序列化到最终的 JSON 字符串中。
space
可选- 指定缩进用的空白字符串,用于美化输出(pretty-print)。
- 举例说明:
- ① 只有value时:
1 <script type="text/javascript"> 2 var student = new Object(); 3 student.name="Leon"; 4 student.age = "24"; 5 student.college = "shiep"; 6 7 var json = JSON.stringify(student); 8 console.log(json); 9 </script>
输出结果:
{"name":"Leon","age":"24","college":"shiep"}
②参数中有函数:
对象+函数
During the serialization process, if a toJSON method exists for the value argument, JSON.stringify first calls the toJSON method. If it does not exist, the original value is used. Next, if a replacer argument is provided, the value (original value or toJSON return-value) is replaced with the return-value of the replacer argument.Finally, white spaces are added to the value based on the optional space argument to generate the final JSON text.
1 <script type="text/javascript"> 2 var student = new Object(); 3 student.name="Leon"; 4 student.age = "24"; 5 student.college = "shiep"; 6 7 student.toJSON = function(key){ 8 var replacement = new Object(); 9 for(var val in this){ 10 if(typeof(this[val])==='string') 11 replacement[val] = this[val].toUpperCase(); 12 else 13 replacement[val] = this[val] 14 } 15 return replacement; 16 } 17 18 var json = JSON.stringify(student); 19 console.log(json); 20 </script>
数组+函数:
1 <script type="text/javascript"> 2 3 var students = new Array() ; 4 students[0] = "Lanny"; 5 students[1] = "dong"; 6 students[2] = "I love you"; 7 8 var json = JSON.stringify(students,switchJson); 9 10 function switchJson(key,value){ 11 return value.toString().toUpperCase(); 12 } 13 console.log(json); 14 </script>
输出为:
"LANNY,DONG,I LOVE YOU"
③参数中有数组:
数组+数组
1 <script type="text/javascript"> 2 var students = new Array(); 3 students[0] = "Leon"; 4 students[1] = "James"; 5 students[2] = "Frank"; 6 7 var schools = new Array(); 8 schools[0] = "shiep"; 9 schools[1] = "fdu"; 10 11 var json1 = JSON.stringify(students,schools); 12 var json2 = JSON.stringify(schools,students); 13 14 console.log("json1="+json1); 15 console.log("json2="+json2); 16 </script>
输出结果为:
1 json1=["Leon","James","Frank"] 2 json2=["shiep","fdu"]
如果两个参数均是数组的话,只序列化前一个数组。
对象+数组
1 <script type="text/javascript"> 2 var student = new Object(); 3 student.name = "Leon"; 4 student.age = "24"; 5 student.college = "shiep"; 6 7 var students = new Array(); 8 students[0] = "college"; 9 students[1] = "age"; 10 11 var json = JSON.stringify(student,students); 12 console.log(json); 13 </script>
结果为:
1 {"college":"shiep","age":"24"}
④第三个参数
如果 space 是数字,则返回值具有空白的文本缩进指定数目在每个级别的。 如果 space 大于 10 时,文本缩进 10 个空白。
如果 space 为非空字符串,如“ ”,返回值文本缩进与字符串的字符在每个级别。
如果 space 为大于 10 个字符的字符串,使用前 10 个字符。
1.2 好多时候需要转换的信息并不是现成的对象,需要我们来拼凑,这时候需要
下面的代码是将一张表格以一个行 为单位组成json
1 <script type="text/javascript"> 2 var fitModelsingle = new Array(); 3 $('#fitModelDispArea tr').each(function () { 4 var tdArry = $(this).find("td"); 5 fitModelsingle.push("{"VehicleBrandName":"" + tdArry.eq(0).text() + "","VehicleManufacturerName":"" + tdArry.eq(1).text() + "","VehicleSeriesPureName":"" + tdArry.eq(2).text() + "","ModelYear":"" + tdArry.eq(3).text() + "","VehicleModelName":"" + tdArry.eq(4).text() + ""}"); 6 });
7 //fitModelsingle.join(); 8 //if (fitModelsingle.length != 0) { 9 // var fitModelList = "[" + fitModelsingle + "]";
11 //}
var fitModelList = JSON.stringify(fitModelsingle); //以上注释的三句等价于这一句
console.log(fitModelList); 12 </script>1.3后台传递过来的好多数据都是字符串形式,并且双引号是由" 表示,此时要想将格式正确,但是字符有问题的字符串转换为JSON:
如:后台传入一个list
list=list.replace(/"/g, '"'); list= $.parseJSON(mathchingModelList);
输出的list便是JSON数据。 注:用$.parseJSON()需要引入jQuery包。
2、将JSON转化为其他数据类型
JSON.parse 把一个json字符串解析成对象。