zoukankan      html  css  js  c++  java
  • json与javabean之间的转化

    接着上一个http://www.cnblogs.com/ya-qiang/p/9009134.html随笔,继续介绍json与java对象之间的转化

    一、java普通对象和json字符串的互转

    java对象---->json

    首先创建一个java对象:

    public class Student {
    	//姓名
    	private String name;
    	//年龄
    	private String age;
    	//住址
    	private String address;
    	public String getName() {
    	return name;
    	}
    	public void setName(String name) {
    	this.name = name;
    	}
    	public String getAge() {
    	return age;
    	}
    	public void setAge(String age) {
    	this.age = age;
    	}
    	public String getAddress() {
    	return address;
    	}
    	public void setAddress(String address) {
    	this.address = address;
    	}
    	@Override
    	public String toString() {
    	return "Student [name=" + name + ", age=" + age + ", address="
    	+ address + "]";
    	}
    }
    

      现在java对象转换为json形式:

    public static void convertObject() {
    		Student stu=new Student();
    		stu.setName("JSON");
    		stu.setAge("23");
    		stu.setAddress("北京市西城区");
    		//1、使用JSONObject
    		JSONObject json = JSONObject.fromObject(stu);
    		//2、使用JSONArray
    		JSONArray array=JSONArray.fromObject(stu);
    		String strJson=json.toString();
    		String strArray=array.toString();
    		System.out.println("strJson:"+strJson);
    		System.out.println("strArray:"+strArray);
    		}
    

      定义了一个Student的实体类,然后分别使用了JSONObject和JSONArray两种方式转化为JSON字符串,下面看打印的结果:

    json-->javabean

    上面说明了如何把java对象转化为JSON字符串,下面看如何把JSON字符串格式转化为java对象,

    首先需要定义两种不同格式的字符串,需要使用对双引号进行转义。

    public static void jsonStrToJava(){
    		//定义两种不同格式的字符串
    		String objectStr="{"name":"JSON","age":"24","address":"北京市西城区"}";
    		String arrayStr="[{"name":"JSON","age":"24","address":"北京市西城区"}]";
    		//1、使用JSONObject
    		JSONObject jsonObject=JSONObject.fromObject(objectStr);
    		Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);
    		//2、使用JSONArray
    		JSONArray jsonArray=JSONArray.fromObject(arrayStr);
    		//获得jsonArray的第一个元素
    		Object o=jsonArray.get(0);
    		JSONObject jsonObject2=JSONObject.fromObject(o);
    		Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);
    		System.out.println("stu:"+stu);
    		System.out.println("stu2:"+stu2);
    	}
    

      运行结果:

    从上面的代码中可以看出,使用JSONObject可以轻松的把JSON格式的字符串转化为java对象,但是使用JSONArray就没那么容易了,因为它有“[]”符号,所以我们这里在获得了JSONArray的对象之后,取其第一个元素即我们需要的一个student的变形,然后使用JSONObject轻松获得。

    二、list和json字符串的互转

    下面将list转化为json字符串:

    public static void convertListObject() {
    		Student stu=new Student();
    		stu.setName("JSON");
    		stu.setAge("23");
    		stu.setAddress("北京市西城区");
    		Student stu2=new Student();
    		stu2.setName("JSON2");
    		stu2.setAge("23");
    		stu2.setAddress("北京市西城区");
    		//注意如果是list多个对象比需要使用JSONArray
    		JSONArray array=JSONArray.fromObject(stu);
    		String strArray=array.toString();
    		System.out.println("strArray:"+strArray);
    	}
    

      运行结果为:strArray:[{"address":"北京市西城区","name":"JSON","age":"23"},{"address":"北京市西城区","name":"JSON2","age":"23"}]

    如果使用JSONObject进行转换会出现:Exception in thread "main" net.sf.json.JSONException: 'object' is an array. Use JSONArray instead

    下面将json串转换为list

    public static void jsonToList(){
    		String arrayStr="[{"name":"JSON","age":"24","address":"北京市西城区"},{"name":"JSON2","age":"24","address":"北京市西城区"}]";
    		//转化为list
    		List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr), Student.class);
    		for (Student stu : list2) {
    		System.out.println(stu);
    		}
    		//转化为数组
    		Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);
    		for (Student student : ss) {
    		System.out.println(student);
    		}
    	}
    

      运行结果为:

     

    三、map和json字符串的互转

    map转化为json字符串

    public static void mapToJSON(){
    		Student stu=new Student();
    		stu.setName("JSON");
    		stu.setAge("23");
    		stu.setAddress("中国上海");
    		Map<String,Student> map=new HashMap<String,Student>();
    		map.put("first", stu);
    		//1、JSONObject
    		JSONObject mapObject=JSONObject.fromObject(map);
    		System.out.println("mapObject:"+mapObject.toString());
    		//2、JSONArray
    		JSONArray mapArray=JSONArray.fromObject(map);
    		System.out.println("mapArray:"+mapArray.toString());
    	}
    

      运行结果:

    json字符串转化为map:

    	public static void jsonToMap(){
    		String strObject="{"first":{"address":"中国上海","age":"23","name":"JSON"}}";
    		//JSONObject
    		JSONObject jsonObject=JSONObject.fromObject(strObject);
    		Map map=new HashMap();
    		map.put("first", Student.class);
    		//使用了toBean方法,需要三个参数 
    		MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map);
    		System.out.println(my.getFirst());
    	}  

    注意在转化为map的时候需要创建一个类,类里面需要有first属性跟json串里面的一样:

    使用toBean()方法是传入了三个参数,第一个是JSONObject对象,第二个是MyBean.class,第三个是一个Map对象。通过MyBean可以知道此类中要有一个first的属性,且其类型为Student,要和map中的键和值类型对应,即,first对应键 first类型对应值的类型。

    运行结果:

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/ya-qiang/p/9009506.html
Copyright © 2011-2022 走看看