Java中将json字符串转化为实体(实体中包含list变量)
程序员文章站
2022-06-15 12:08:50
...
最近在开发中所写接口被三方调用,三方以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;
}
}
上一篇: 11 Scala 隐式转换