您的位置:首页 > 移动开发 > Objective-C

使用json-lib将JSONObject转Java对象,JSONArray转Java集合

2017-03-03 17:37 726 查看

解析用的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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java json json-lib