Java中将json字符串转化为实体(实体中包含list变量)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Recky_wiers/article/details/79216240

最近在开发中所写接口被三方调用,三方以json格式返回许多数据要存储,需要将json格式的数据转化成实体对象,一般情况下简单的实体对象转化起来比较容易,但是我所遇到的是实体中嵌套多层list的情况,转化时比较麻烦,查阅了许多资料,现将转化方法进行整理,如下:

    1.准备相应的jar包。我试验的时候采用的是jdk1.7环境,主要使用的类是:net.sf.json.JSONObject

导入的相应jar包:

2.先将json字符串转换为JSONObject,然后新建一个Map<String,Class>,其中key为实体中对应的list字段,value为相应class,最后使用net.sf.json.JSONObject的toBean方法将JSONObject转化为实体类,具体代码如下:

// 先将前端或者三方传过来的字符串或者json数据转换为JSONObject
    JSONObject jsonObj = JSONObject.fromObject(str);
    //建立map存储实体类中的list,其中key要和实体类中的相应字段相同,若list所含的实体类中仍存在list,也可一并存储在          map中
    Map<String, Class> classMap = new HashMap<String, Class>();
      classMap.put("cities", City.class);
      classMap.put("towns", Town.class);
    //使用JSONObject的toBean方法将JSONObject对象转化为实体
    Country country = (Country) JSONObject.toBean(jsonObj, Country.class,classMap);
    System.out.println(country.getCities().get(0).getTowns());

输入的json字符串:

{
    "name":"中国",
    "age":5000,
    "capital":"北京",
    "cities":[
        {
            "name":"上海",
            "age":50,
            "towns":[
                {
                    "name":"闵行区",
                    "age":50
                },
                {
                    "name":"浦东新区",
                    "age":50
                }
            ]
        },
        {
            "name":"河南",
            "age":60,
            "towns":[
                {
                    "name":"信阳",
                    "age":50
                },
                {
                    "name":"焦作",
                    "age":40
                }
            ]
        }
    ]
  }

实体类中不重写toString方法时的输出:



实体类中重写toString方法时的输出:

实验中所用实体类:

package domain;

import java.io.Serializable;
import java.util.List;
/**
 * 国家bean
 * @author wuts
 *
 */
@SuppressWarnings("serial") 
public class Country implements Serializable{

	private String name;//国家名称
	
	private int age;//成立年限
	
	private String capital;//中心城市
	
	private List<City> cities;//国家所包含城市list

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getCapital() {
		return capital;
	}

	public void setCapital(String capital) {
		this.capital = capital;
	}

	public List<City> getCities() {
		return cities;
	}

	public void setCities(List<City> cities) {
		this.cities = cities;
	}
}

package domain;

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

/**
 * 城市bean
 * @author wuts
 *
 */
@SuppressWarnings("serial") 
public class City implements Serializable{

	private String name;//城市名称
	
	private int age;//建立年限
	
	private List<Town> towns;//城市所包含乡镇list

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public List<Town> getTowns() {
		return towns;
	}

	public void setTowns(List<Town> towns) {
		this.towns = towns;
	}
}

package domain;

import java.io.Serializable;

/**
 * 乡镇bean
 * @author wuts
 *
 */
@SuppressWarnings("serial") 
public class Town implements Serializable{

	private String name;//乡镇名称
	
	private int age;//乡镇建立年限

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}



猜你喜欢

转载自blog.csdn.net/Recky_wiers/article/details/79216240