JSON详细学习之JSONObject in JAVA

需要依赖的jar包: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar  ezmorph.jar json-lib-2.2.2-jdk15.jar

首先简单地看一下JSONObject,JSONArray对象的创建以及Json字符串的解析:

package com.peter.jsonobj.test;

import java.util.ArrayList;
import java.util.HashMap;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class Test2 {
        public static void main(String[] args) {
        	//JsonObject和JsonArray区别就是JsonObject是对象形式,JsonArray是数组形式
            //创建JsonObject第一种方法
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("UserName", "ZHULI");
            jsonObject.put("age", "30");
            jsonObject.put("workIn", "ALI");
            System.out.println("jsonObject1:" + jsonObject);
            
            //创建JsonObject第二种方法
            HashMap<String, String> hashMap = new HashMap<String, String>();
            hashMap.put("UserName", "ZHULI");
            hashMap.put("age", "30");
            hashMap.put("workIn", "ALI");
            System.out.println("jsonObject2:" + JSONObject.fromObject(hashMap));
            
            //创建一个JsonArray方法1
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(0, "ZHULI");
            jsonArray.add(1, "30");
            jsonArray.add(2, "ALI");
            System.out.println("jsonArray1:" + jsonArray);
            
            //创建JsonArray方法2
            ArrayList<String> arrayList = new ArrayList<String>();
            arrayList.add("ZHULI");
            arrayList.add("30");
            arrayList.add("ALI");
            System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));
            
            //如果JSONArray解析一个HashMap,则会将整个对象的放进一个数组的值中
            System.out.println("jsonArray FROM HASHMAP:" + JSONArray.fromObject(hashMap));
            
            //组装一个复杂的JSONArray
            JSONObject jsonObject2 = new JSONObject();
            jsonObject2.put("UserName", "ZHULI");
            jsonObject2.put("age", "30");
            jsonObject2.put("workIn", "ALI");
            jsonObject2.element("Array", arrayList);
            System.out.println("jsonObject2:" + jsonObject2);
            
            
            //解析JSON字符串:
            String jsonString = "{\"UserName\":\"ZHULI\",\"age\":\"30\",\"workIn\":\"ALI\",\"Array\":[\"ZHULI\",\"30\",\"ALI\"]}";
            //将Json字符串转为java对象
            JSONObject obj = JSONObject.fromObject(jsonString);
            //获取Object中的UserName
            if (obj.has("UserName")) {
                System.out.println("UserName:" + obj.getString("UserName"));
            }
            //获取ArrayObject
            if (obj.has("Array")) {
                JSONArray transitListArray = obj.getJSONArray("Array");
                for (int i = 0; i < transitListArray.size(); i++) {
                    System.out.print("Array:" + transitListArray.getString(i) + " ");
                }
            }
		}
}
结果如下:

jsonObject1:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
jsonObject2:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
jsonArray1:["ZHULI","30","ALI"]
jsonArray2:["ZHULI","30","ALI"]
jsonArray FROM HASHMAP:[{"workIn":"ALI","age":"30","UserName":"ZHULI"}]
jsonObject2:{"workIn":"ALI","age":"30","Array":["ZHULI","30","ALI"],"UserName":"ZHULI"}
UserName:ZHULI
Array:ZHULI Array:30 Array:ALI 


由于我们涉及更多的是对象(Bean)与Json字符串之间的转换.这里我创建了我的Model类

package com.peter.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class ClassInfo implements Serializable{
	private String className;
	private int  classNum;
	private Teacher teacher;
	private List<Student> students=new ArrayList<Student>();
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	
	public Teacher getTeacher() {
		return teacher;
	}
	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}
	public List<Student> getStudents() {
		return students;
	}
	public void setStudents(List<Student> students) {
		this.students = students;
	}
	public int getClassNum() {
		return classNum;
	}
	public void setClassNum(int classNum) {
		this.classNum = classNum;
	}
	@Override
	public String toString() {
		return "ClassInfo [className=" + className + ", classNum=" + classNum
				+ ", teacher=" + teacher + ", students=" + students + "]";
	}
	
}

package com.peter.model;
import java.io.Serializable;

import java.util.Date;

public class Student implements Serializable{  
    private int id;  
    private String name;  
    private Date birthDay;  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public Date getBirthDay() {  
        return birthDay;  
    }  
  
    public void setBirthDay(Date birthDay) {  
        this.birthDay = birthDay;  
    }  
  
    @Override  
    public String toString() {  
        return "Student [birthDay=" + birthDay + ", id=" + id + ", name="  
                + name + "]";  
    }  
  
}  
<pre name="code" class="java">package com.peter.model;

import java.io.Serializable;

public class Teacher implements Serializable{
        private String name;
        private String jabNum;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getJabNum() {
			return jabNum;
		}
		public void setJabNum(String jabNum) {
			this.jabNum = jabNum;
		}
		@Override
		public String toString() {
			return "Teacher [name=" + name + ", jabNum=" + jabNum + "]";
		}
        
}

 以上的model基本上能满足所有的Json字符串格式. 

package com.peter.jsonobj.test;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import net.sf.json.util.CycleDetectionStrategy;

import com.peter.model.ClassInfo;
import com.peter.model.Student;
import com.peter.model.Teacher;

public class Test {
	public static void main(String[] args) {

		Student student1 = new Student();
		student1.setId(1);
		student1.setName("李坤");
		student1.setBirthDay(new Date());

		// //
		System.out.println("----------简单对象之间的转化-------------");
		// 简单的bean转为json
		// 默认日期:"birthDay":{"time":1445158142832,"minutes":49,"seconds":2,"hours":16,"month":9,"year":115,"timezoneOffset":-480,"day":0,"date":18}
		JSONObject jso = JSONObject.fromObject(student1);
		String s1 = jso.toString();
		System.out.println("(默认日期)简单Bean转化为Json===" + s1);

		JSONObject jso1 = JSONObject.fromObject(student1, getConfig());
		s1 = jso1.toString();
		System.out.println("(设置日期)简单Bean转化为Json===" + s1);

		// // json转为简单Bean
		JSONObject o1 = (JSONObject) JSONSerializer.toJSON(s1);
		Student student = (Student) JSONObject.toBean(o1, Student.class);
		System.out.println("Json转为简单Bean===" + student);

		Student student2 = new Student();
		student2.setId(2);
		student2.setName("曹贵生");
		student2.setBirthDay(new Date());

		Student student3 = new Student();
		student3.setId(3);
		student3.setName("柳波");
		student3.setBirthDay(new Date());

		List<Student> list = new ArrayList<Student>();
		list.add(student1);
		list.add(student2);
		list.add(student3);

		System.out.println("----------带泛型的List之间的转化-------------");
		JSONArray jary1 = JSONArray.fromObject(list, getConfig());
		// 带泛型的list转化为json
		String s2 = jary1.toString();
		System.out.println("带泛型的list转化为json==" + s2);
		// json转为带泛型的list
		// 数组
		Student[] arrList = (Student[]) JSONArray.toArray(jary1, Student.class);

		// 集合
		@SuppressWarnings("unchecked")
		List<Student> lists = JSONArray.toList(jary1, Student.class);
		for (Student stu : arrList) {
			System.out.println(stu.getName());
		}
		for (Student stu : lists) {
			System.out.println(stu.getName());
		}
		//
		Teacher t = new Teacher();
		t.setJabNum("t101");
		t.setName("lijun");
		ClassInfo ci = new ClassInfo();
		ci.setClassName("cna");
		ci.setClassNum(101);
		ci.setStudents(list);
		ci.setTeacher(t);
		JSONObject clajso = JSONObject.fromObject(ci, getConfig());
		String c = clajso.toString();
		System.out.println("ci to json  //");
		System.out.println(c);

		System.out.println("json to ci //");
		JSONObject o2 = (JSONObject) JSONSerializer.toJSON(c);
		ClassInfo cijson = (ClassInfo) JSONObject.toBean(o2, ClassInfo.class);
		JSONArray array = o2.getJSONArray("students");
		System.out.println(array.size());
		for (int i = 0; i < array.size(); i++) {
			JSONObject object = (JSONObject) array.get(i);
			Student studentaa = (Student) JSONObject.toBean(object,
					Student.class);
			cijson.getStudents().add(studentaa);
		}
		System.out.println(cijson);

	}

	public static JsonConfig getConfig() {
		// 设置日期格式
		JsonConfig config = new JsonConfig();
		// 防止对象间的循环引用所产生的jsonString
		config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
		config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {

			public Object processObjectValue(String arg0, Object arg1,
					JsonConfig arg2) {
				SimpleDateFormat sdf = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss.SSS");
				Date d = (Date) arg1;
				return sdf.format(d);
			}

			public Object processArrayValue(Object arg0, JsonConfig arg1) {
				// TODO Auto-generated method stub
				return null;
			}
		});
		return config;
	}
}

结果如下:

----------简单对象之间的转化-------------
(默认日期)简单Bean转化为Json==={"id":1,"name":"李坤","birthDay":{"time":1466596005549,"minutes":46,"seconds":45,"hours":19,"month":5,"year":116,"timezoneOffset":-480,"day":3,"date":22}}
(设置日期)简单Bean转化为Json==={"id":1,"name":"李坤","birthDay":"2016-06-22 19:46:45.549"}
Json转为简单Bean===Student [birthDay=Wed Jun 22 19:46:45 CST 2016, id=1, name=李坤]
----------带泛型的List之间的转化-------------
带泛型的list转化为json==[{"id":1,"name":"李坤","birthDay":"2016-06-22 19:46:45.549"},{"id":2,"name":"曹贵生","birthDay":"2016-06-22 19:46:45.938"},{"id":3,"name":"柳波","birthDay":"2016-06-22 19:46:45.938"}]

李坤
曹贵生
柳波
李坤
曹贵生
柳波
ci to json  //
{"students":[{"id":1,"name":"李坤","birthDay":"2016-06-22 19:46:45.549"},{"id":2,"name":"曹贵生","birthDay":"2016-06-22 19:46:45.938"},{"id":3,"name":"柳波","birthDay":"2016-06-22 19:46:45.938"}],"className":"cna","teacher":{"name":"lijun","jabNum":"t101"},"classNum":101}
json to ci //
3

ClassInfo [className=cna, classNum=101, teacher=Teacher [name=lijun, jabNum=t101], students=[net.sf.ezmorph.bean.MorphDynaBean@331ae2ce[
  {id=1, name=李坤, birthDay=2016-06-22 19:46:45.549}
], net.sf.ezmorph.bean.MorphDynaBean@36293b29[
  {id=2, name=曹贵生, birthDay=2016-06-22 19:46:45.938}
], net.sf.ezmorph.bean.MorphDynaBean@4ceb1c86[
  {id=3, name=柳波, birthDay=2016-06-22 19:46:45.938}
], Student [birthDay=Wed Jun 22 19:46:46 CST 2016, id=1, name=李坤], Student [birthDay=Wed Jun 22 19:46:46 CST 2016, id=2, name=曹贵生], Student [birthDay=Wed Jun 22 19:46:46 CST 2016, id=3, name=柳波]]]


以上的例子,相信能够解决我们大部分的问题,在此顺便提供其API,方便大家查看学习

http://json-lib.sourceforge.net/apidocs/jdk15/index.html


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值