使用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);
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值