当前位置:首页 > 后端开发 > 使用json-lib将JSONObject转Java对象,JSONArray转Java集合

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

7个月前 (05-24)26

解析用的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

标签: Java集合Java

“使用json-lib将JSONObject转Java对象,JSONArray转Java集合” 的相关文章

java环境变量配置  配置系统环境变量

java环境变量配置 配置系统环境变量

java环境变量配置,配置java环境变量,JDK的下载、安装和配置 可以到我的知乎主页(更多详细内容等你关注呦):https://www.zhihu.com/people/xing-c...

java集合List解析

作为一个Developer,Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求; Java集合就像一个容器,...

Java多线程之内存可见性

Java多线程之内存可见性

1、什么是JAVA 内存模型 Java Memory Model (JAVA 内存模型)描述线程之间如何通过内存(memory)来进行交互。 具体说来, JV...

java中多线程的实现

1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结...

Java集合框架的继承关系图

Java集合框架的继承关系图

Java集合框架图 1. Collection 2. Map 作者:Nancy_2 来源链接:https://b...

JAVA多线程及线程状态转换

JAVA多线程及线程状态转换

以下内容整理自:http://blog.csdn.net/wtyvhreal/article/details/44176369 线程:是指进程中...

有关eclipse for java ee版本遇到的坑( Context initialization failed)

这几天把以前网上看的视频的源代码拷贝到eclipse下面进行学习,当时用的是eclipse-jee-neon-M4a-win32-x86_64这个版本的eclipse,因为它本身集合了w...

【java 多线程】多线程并发同步问题及解决方法

【java 多线程】多线程并发同步问题及解决方法

一、线程并发同步概念 线程同步其核心就在于一个“同”。所谓“同”就是协同、协助、配合,“同步”就是协同步调昨,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”。...

Elasticsearch 2.X 版本Java插件开发简述

Elasticsearch 2.X 版本Java插件开发简述

1:elasticsearch插件分类简述 2:Java插件开发要点 3:如何针对不同版本elasticsearch提供多版本的插件 4:插件具有外部依赖时遇到的一些问...

算法篇(前序)——Java的集合

算法篇(前序)——Java的集合

菜鸟拙见,望请纠正:附上JDK参考文档(中文文档和英文文档):链接:https://pan.baidu.com/s/14KDmCtQxeGCViq7e0zENjA 密码:e9xs&nbs...