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