`

json处理总结(前端js和后端java)

阅读更多

 JSON官网:官网地址 (各种编程语言对应的工具应有尽有,前提能读英文)

 

json: json为前端后端以及网络传输的数据交换格式,可以通过它来表示各种各样复杂的数据,如对象,数组,集合,以及集合的集合等数据。

 

以下不讲概念问题,只介绍代码如何实现。 

 

 

前端(js):

              json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换。

 

              json字符串:var str1 = '{ "name": "zyy", "sex": "man" }';//最外面包含了一对单引号
	      json对象: var str2 = { "name": "zyy", "sex": "man" };	//严格的json组成格式

1.json字符串-->json对象(四种方式)

      1.使用原生的js函数进行解析

var obj = eval('(' + str1 + ')');

       2.使用jquery插件提供的工具进行解析

var obj = $.parseJSON( str1 );

       3.使用js原生的JSON对象进行解析(此种方式会出现低版本浏览器<=IE8不兼容问题,不推荐,具体参见

var obj = JSON.parse(str1);

       4.使用JSON官网上提供的json2.js类库对象进行解析 (官网地址 下载json2.js地址),ps:记得引入该文件哦,嘿嘿

var obj = JSON.parse(str1);

         注意:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

2.json对象 --> json字符串

     1.使用JSON官网上提供的json2.js类库对象进行解析

var str = JSON.stringify(str2);

     2.使用js原生的方法(兼容性和上面的3一样)

var str = str2.toJSONString();

 

 

 

 

 ---------------------------------------------------分割线--------------------------------------------------------------------

 

 

 后端(java)

 

 java提供的处理json的类库比较多,类库都是提供了一些对java对象(内含集合、对象、数组等复杂数据类型)或者数组的序列化和反序列换的功能。常用的一些类库如下:

1.org.json    源码下载     官网地址(含API)

2.fastjson(国产) 

3.json-lib

4.jackson

5.Gson

此处是常用类库性能比较 

注:序列化(对象-->json字符串)      反序列化(json字符串-->对象)

 

由于大多数类库的功能都差不多,所以只介绍fastjson这一种

 

 

以下是几个基本的bean类型

 

student类:

 

 

public class Student {

	private int studentId;
	
	private String username;
	
	private int age;
	
	private String sex;

	//省略setter /getter方法
}

 

Class类

 

public class Class {
	
	private int classId;
	
	private Set<Student> students;  //上面的Student类集合
        //省略setter和getter方法

}

 

School类

public class School {

	private int schoolId;
	
	private	Set<Class> classes; //上面的class对象集合
        //省略setter和getter方法
}

 

测试代码

public class FastjsonTest {

	public static void main(String[] args) {
	    //构造学生对象
	    Student stu1 = new Student();
	    stu1.setStudentId(1);
	    stu1.setUsername("张三");
	    Student stu2 = new Student();
	    stu2.setStudentId(2);
	    stu2.setUsername("李四");

	    //构造class对象
	    Class class1 = new Class();
        Set<Student> sets = new HashSet<Student>();
        sets.add(stu2);
        sets.add(stu1);
        class1.setClassId(7);
	    class1.setStudents(sets);
	    
	    //构造学校
	    School school = new School();
	    Set<Class> sets1 = new HashSet<Class>();
	    sets1.add(class1);
	    school.setSchoolId(2014);
	    school.setClasses(sets1);
	    
	    String jsonString = JSONObject.toJSONString(school);  //序列化
	    System.out.println(jsonString);
	    System.out.println("-----------------------------");
	    School school2 = JSONObject.parseObject(jsonString, School.class);  //反序列化
	    Iterator<Class> set = school2.getClasses().iterator();
	    while(set.hasNext()){
            Class class2 = set.next();
            System.out.println("classId=" + class2.getClassId() + "  ");
            
            Iterator<Student> sIterator = class2.getStudents().iterator();
	        while(sIterator.hasNext()){
	            Student student = sIterator.next();
	            System.out.println( " \t" + "studentId="+ student.getStudentId() + ",username=" + student.getUsername());
	        }
	        System.out.println();
	    }
	}
	

}

 

 

 

 

 最后:以上只是简单的一些功能,当然类库中还有很多其他的一些功能,想要深入,自行去查阅吧,哈哈! 喝杯茶去!

 

 

 

 

 

 

 

 

 

 

 

 

1
2
分享到:
评论
1 楼 longhua2003 2015-11-18  

相关推荐

Global site tag (gtag.js) - Google Analytics