使用json-lib将JSONObject转Java对象,JSONArray转Java集合
解析用的json包
gradle 引用
net.sf.json-lib:json-lib:2.4:jdk15
待转换用的Json对象(userString)
{
"Name": "nameA",
"title": "title1",
"orders": [
{
"Sn": 123,
"amount": 20.50,
"items": [
{
"pid": "p_1",
"pName": "p1_name"
}
]
},
{
"Sn": 456,
"amount": 23.00,
"items": [
{
"pid": "p_2",
"pName": "p2_name"
}
]
}
]
}
待转换用的Json数组(userArrString)
[
{
"Name": "nameA",
"title": "title1",
"orders": [
{
"Sn": 123,
"amount": 30.50,
"items": [
{
"pid": "p_1",
"pName": "p1_name"
}
]
},
{
"Sn": 456,
"amount": 24.50,
"items": [
{
"pid": "p_2",
"pName": "p2_name"
}
]
}
]
},
{
"Name": "nameB",
"title": "title2",
"orders": [
{
"Sn": 223,
"items": [
{
"pid": "p_3",
"pName": "p3_name"
}
]
},
{
"Sn": 446,
"items": [
{
"pid": "p_5",
"pName": "p5_name"
}
]
}
]
}
]
对应的三个Java类,省略了相应的getter/setter方法
一个User对应多个Order,一个Order对应多个Item
public class User implements Serializable {
private String name;
private List<Order> orders;
.....
}
public class Order implements Serializable {
private String sn;
private BigDecimal amount;
private Set<Item> items;
......
}
public class Item implements Serializable {
private String pid;
private String pName;
......
}
JsonObject转java对象
@Test
public void testJson2Obj() {
try {
JSONObject userJson = JSONObject.fromObject(userString);
User u = (User) JSONObject.toBean(userJson, getJsonConfig());
printUser(u);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 因json对象中的key以大写字母开头,而java类中的属性是小写字母
* 此方法用于将json中的key的首字母变为小写,以适应java类中的属性名
*
*/
class unCapitalPropertyNameProcessor implements PropertyNameProcessor {
@Override
public String processPropertyName(Class arg0, String arg1) {
return StringUtils.uncapitalize(arg1);
}
}
/**
* 定义jsonConfig
*
*/
private JsonConfig getJsonConfig() {
JsonConfig jsonConfig = new JsonConfig();
//要将json转为user
jsonConfig.setRootClass(User.class);
//设置json中数组要对应的java对象
Map<String, Class<?>> map = new HashMap<String, Class<?>>();
map.put("orders", Order.class);
map.put("items", Item.class);
jsonConfig.setClassMap(map);
//注册java属性名处理器
//如果不注册的话,会因为json中的key的值与java中的属性名称不同而无法将value值设置到相应的java属性中
jsonConfig.registerJavaPropertyNameProcessor(User.class, new unCapitalPropertyNameProcessor());
jsonConfig.registerJavaPropertyNameProcessor(Order.class, new unCapitalPropertyNameProcessor());
return jsonConfig;
}
JSONArray转Java集合
JSON数组转java集合与json对象转java对象相同
@Test
public void testJsonArray2List() {
JSONArray userJsonArr = JSONArray.fromObject(userArrString);
List<User> list = (List<User>) JSONArray.toCollection(userJsonArr, getJsonConfig());
for (User u : list) {
printUser(u);
}
}
作者:just4you
来源链接:https://blog.csdn.net/just4you/article/details/60143733