关于json的总结

     这些天看了在网上看了许多关于json转换的博客论坛,里面大神们的总结一个比一个精辟。我呢,为了防止以后工作上遇到此类情况,自己又需要去到处找。所以也决定总结下,方便以后拷贝。操作所需jar在资源中

        下面是用到的JavaBean

       Student类

package com.model;

public class Student {

	private String userName;
	private int age;
	private String sex;
	private Course course;
	
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Course getCourse() {
		return course;
	}
	public void setCourse(Course course) {
		this.course = course;
	}
        @Override
<span style="white-space:pre">	</span>public String toString() {
<span style="white-space:pre">		</span>return "姓名"+userName+"年龄"+age+"课程代码"+course.getCourseCode()+"课程名称"+course.getCourseName();
<span style="white-space:pre">	</span>}	
	
}

        Course类

package com.model;

public class Course {

	private String courseName;
	private String courseCode;

	public String getCourseName() {
		return courseName;
	}

	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}

	public String getCourseCode() {
		return courseCode;
	}

	public void setCourseCode(String courseCode) {
		this.courseCode = courseCode;
	}	
	
}

     

情况1. 将javaBean转为Json

<span style="color:#ff0000;">	</span>public static void main(String[] args) {		
			Student s = new Student();
			s.setAge(12);
			s.setSex("nan");
			s.setUserName("张三");
			Course course = new Course();
			course.setCourseName("高数");
			course.setCourseCode("BH675FG");
			s.setCourse(course);		
		String json = net.sf.json.JSONObject.fromObject(s).toString();
		System.out.println(json);
	}

                  结果:

           {"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张三"}

      情况2. 将List转为Json
     public static void main(String[] args) {
		List<Student> students = new ArrayList<Student>();
		for (int i = 0; i <= 5; i++) {
			Student s = new Student();
			s.setAge(12);
			s.setSex("nan");
			s.setUserName("张--"+i);
			Course course = new Course();
			course.setCourseName("高数");
			course.setCourseCode("BH675FG");
			s.setCourse(course);
			students.add(s);
		}
		String d = JSONArray.fromObject(students).toString();
		System.out.println(d);
	}
      结果:

         [{"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张--0"},{"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张--1"},{"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张--2"},{"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张--3"},{"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张--4"},{"age":12,"course":{"courseCode":"BH675FG","courseName":"高数"},"sex":"nan","userName":"张--5"}]

       情况3.  将JSON转为Bean
 
<span style="color:#ff0000;">	</span>public static void main(String[] args) {		
		String json = "{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张三\"}";			
		JSONObject jsonObject = JSONObject.fromObject(json);
		Student student = (Student) JSONObject.toBean(jsonObject, Student.class);
		System.out.println(student.toString());		
	}
     结果:

        姓名张三年龄12课程代码BH675FG课程名称高数

     情况4.  将JSON转为List

public static void main(String[] args) {		
		String json = "[{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张^^^0\"},{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张^^^1\"},{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张^^^2\"},{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张^^^3\"},{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张^^^4\"},{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张^^^5\"}]";			
		JSONArray array = JSONArray.fromObject(json);
		List<Student> students = (List<Student>) JSONArray.toCollection(array, Student.class);
		for (Student student : students) {
			System.out.println(student.toString());
		}
	}

 结果:

        姓名张^^^0年龄12课程代码BH675FG课程名称高数
  姓名张^^^1年龄12课程代码BH675FG课程名称高数
姓名张^^^2年龄12课程代码BH675FG课程名称高数
姓名张^^^3年龄12课程代码BH675FG课程名称高数
姓名张^^^4年龄12课程代码BH675FG课程名称高数
姓名张^^^5年龄12课程代码BH675FG课程名称高数


     情况5.  将JSON转为MAP(JSON数据为单个对象)

public static Map<String, Object> parseJSON2Map(String jsonStr) {
		Map<String, Object> map = new HashMap<String, Object>();
		// 最外层解析
		JSONObject json = JSONObject.fromObject(jsonStr);
		for (Object k : json.keySet()) {
			Object v = json.get(k);
			// 如果内层还是数组的话,继续解析
			if (v instanceof JSONArray) {
				List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
				Iterator<JSONObject> it = ((JSONArray) v).iterator();
				while (it.hasNext()) {
					JSONObject json2 = it.next();
					list.add(parseJSON2Map(json2.toString()));
				}
				map.put(k.toString(), list);
			} else {
				map.put(k.toString(), v);
			}
		}
		return map;
	}

	public static void main(String[] args) {
		String data = "{\"age\":12,\"course\":{\"courseCode\":\"BH675FG\",\"courseName\":\"高数\"},\"sex\":\"nan\",\"userName\":\"张三\"}";
		Map<String, Object> d = parseJSON2Map(data);
		Iterator<Entry<String, Object>> iterator = d.entrySet().iterator();
		while (iterator.hasNext()) {
			Map.Entry<java.lang.String, java.lang.Object> entry = (Map.Entry<java.lang.String, java.lang.Object>) iterator
					.next();
			System.out.println(entry);
		}

	}

结果:

       course={"courseCode":"BH675FG","courseName":"高数"}
       sex=nan
       age=12
       userName=张三

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上使用的都是Jar都是json-lib 以及相关jar

google的gson也可以轻松实现上述功能。

   
package com.gson;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.model.Course;
import com.model.Student;

public class TestGson {

	/**
     * 转为JSON
     * @param javaBean
     * @return
     */
	public String bean2Json(Object javaBean){
		Gson gson = new Gson();			
		return gson.toJson(javaBean);		
	}
	
	/**
	 * 将json转为javaBean
	 * @param jsonStr
	 * @return
	 */
	public Student json2Bean(String jsonStr){
		Gson gson = new Gson();
		return gson.fromJson(jsonStr, Student.class);				
	}
	/**
	 * 将json转为List
	 * @param jsonStr
	 * @return
	 */
	public List<Student> json2List(String jsonStr){
		Type listType = new TypeToken<List<Student>>(){}.getType();
		Gson gson = new Gson();
		List<Student> students = gson.fromJson(jsonStr, listType); 
		return students;			
	}
	
	@Test
	public void testBean2Json(){
		Student s = new Student();
		s.setAge(12);
		s.setSex("nan");
		s.setUserName("张三");
		Course course = new Course();
		course.setCourseName("高数");
		course.setCourseCode("BH675FG");
		s.setCourse(course);
		System.out.println(bean2Json(s));
	}
	
	@Test
	public void testJson2Bean(){
		String str = "{\"userName\":\"张三\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}}";
	    Student s = json2Bean(str);
	    System.out.println(s.toString());
	}
	
	@Test
	public void testList2Json(){
		List<Student> students = new ArrayList<Student>();
		for (int i = 0; i <= 5; i++) {
			Student s = new Student();
			s.setAge(12);
			s.setSex("nan");
			s.setUserName("张^^^"+i);
			Course course = new Course();
			course.setCourseName("高数");
			course.setCourseCode("BH675FG");
			s.setCourse(course);
			students.add(s);
		}
		System.out.println(bean2Json(students));
	}
	
	@Test
	public void testJson2List(){
		String str = "[{\"userName\":\"张^^^0\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}},{\"userName\":\"张^^^1\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}},{\"userName\":\"张^^^2\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}},{\"userName\":\"张^^^3\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}},{\"userName\":\"张^^^4\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}},{\"userName\":\"张^^^5\",\"age\":12,\"sex\":\"nan\",\"course\":{\"courseName\":\"高数\",\"courseCode\":\"BH675FG\"}}]";
	    List<Student> s = json2List(str);
	    for (Student student : s) {
	    	 System.out.println(student.toString());
		}	   
	}
}

结果:
测试一:
{"userName":"张三","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}}
测试二:
姓名张三年龄12课程代码BH675FG课程名称高数
测试三:
[{"userName":"张^^^0","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}},{"userName":"张^^^1","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}},{"userName":"张^^^2","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}},{"userName":"张^^^3","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}},{"userName":"张^^^4","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}},{"userName":"张^^^5","age":12,"sex":"nan","course":{"courseName":"高数","courseCode":"BH675FG"}}]
测试四:
姓名张^^^0年龄12课程代码BH675FG课程名称高数
姓名张^^^1年龄12课程代码BH675FG课程名称高数
姓名张^^^2年龄12课程代码BH675FG课程名称高数
姓名张^^^3年龄12课程代码BH675FG课程名称高数
姓名张^^^4年龄12课程代码BH675FG课程名称高数
姓名张^^^5年龄12课程代码BH675FG课程名称高数



                                                                                                                                                                                                       九层之台,始于累土
用心      点滴      积累




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值