欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-15 12:08:50
...

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

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

导入的相应jar包:

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

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方法时的输出:

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

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

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

实验中所用实体类:

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;
	}
}