#FastJson解析嵌套json
仅适用于json数据和对应的实体类的属性名不一致并且还不能新建实体类的问题,这个应该是最笨的方法了。
比如这么一串json数据
{
\"name\":\"zhangsan\",
\"address\":{\"city\":\"shanghaishi\",\"province\":\"shanghai\"},
\"age\":24,
\"cars\":
[{\"brand\":\"BMW\",\"color\":\"red\"},{\"brand\":\"benz\",\"color\":\"black\"}]
}
有address对象,也有cars集合。
实体类
User
public class User {
private String name;
private int age;
private Address address;
private List<Car> cars;
.
.
.
.
}
Address
// 不要用拼音,我是为了显得属性名和json数据不一致
public class Address {
private String sheng;
private String shi;
.
.
}
Car
public class Car {
private String pinpai;
private String yanse;
.
.
}
FastJsonTest
public class FastJsonTest {
@SuppressWarnings("rawtypes")
public static User fastJsonTest(String jsonData) {
User user = new User();
if (StringUtils.isNotBlank(jsonData)) {
List<Car> cars = new ArrayList<Car>();
Address address = new Address();
JSONObject json = JSONObject.parseObject(jsonData);
// 解析
// 获取cars
Car car = null;
List<HashMap> carsList = JSON.parseArray(json.getString("cars"), HashMap.class);
for (int i = 0; i < carsList.size(); i++) {
car = new Car();
car.setPinpai(carsList.get(i).get("brand").toString());
car.setYanse(carsList.get(i).get("color").toString());
cars.add(car);
}
user.setCars(cars);
// 获取address
JSONObject addressJson = json.getJSONObject("address");
address.setSheng(addressJson.getString("province"));
address.setShi(addressJson.getString("city"));
user.setAddress(address);
user.setAge(json.getIntValue("age"));
user.setName(json.getString("name"));
}
return user;
}
public static void main(String[] args) {
String jsonData = "{\"name\":\"zhangsan\",\"address\":{\"city\":\"shanghaishi\",\"province\":\"shanghai\"},\"age\":24,\"cars\":[{\"brand\":\"BMW\",\"color\":\"red\"},{\"brand\":\"benz\",\"color\":\"black\"}]}";
User user = fastJsonTest(jsonData);
System.out.println(user.getName() + "\t" + user.getAge());
System.out.println(user.getAddress().getSheng() + "\t" + user.getAddress().getShi());
for (Car car : user.getCars()) {
System.out.println(car.getPinpai() + "\t" + car.getYanse());
}
}
}
输出结果:
zhangsan 24
shanghai shanghaishi
BMW red
benz black