欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSONArray和JSONObject以及JSONConfig

程序员文章站 2022-07-12 15:52:31
...

JSON数据的其中一个应用场景就是前端的ajax请求java后台数据,后台把封装了数据库中的数据的对象(Object、Array、List、Map、Set等)转换成JSON数据返回,反之也可将JSON数据转化为java对象。

以下是常用的用于解析JSON数据的工具类:

JSONArray,主要用于将Array和List转化为JSON对象,其数据形式为:[{“key1”:”value1”,”key2”:”value2”},{…},…]

JSONObject,主要用于将Object和Map转化为JSON对象,其数据形式为:{“key1”:”value1”,”key2”:”value2”,…}

要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:

commons-lang.jar
commons-beanutils.jar
commons-collections.jar
commons-logging.jar 
ezmorph.jar
json-lib-2.2.2-jdk15.jar

其组合形式为:

{
    "code": 0,
    "msg": "",
    "data": [
        {
            "id": "1",
            "name": "张三",
            "age": 18
        },
        {
            "id": "2",
            "name": "李四",
            "age": 19
        },
        {
            "id": "3",
            "name": "王五",
            "age": 20
        }
    ],
    "count": "3"
}

示例:

//示例代码

JSONConfig,JSON-lib提供了JsonConfig对象,该对象能够深刻影响Java对象转成json字符串的行为。

1.setExcludes(String[]);,用于排除不需要转化为JSON数据的字段

应用场景一:当需要转化的对象存在一对一或一对多的关系时,会造成死循环
// 伪代码
public class User{
    private String userId;
    private Set<Book> books;
}
public class Book{
    private String bookId;
    private User user;
}
public class Test{
    // 因为从数据库查询出来的数据都会封装成对象,并且保持数据之间的关系,比如一对多
    User user = new User(1);
    user.books.add(new Book(1, user));
    user.books.add(new Book(2, user));
    // 这里如果没有加入config排除book里的user,JSONObject就会首先转化user的属性,从books进去后又会转化user,然后又转化books,造成死循环
    JSONConfig config = new JSONConfig();
    config.setExcludes(new String[]{"books.user"});
    JSONObject jsonObject = JSONObject.fromObject(user,config);
}

注意:JSONObject和JSONArray的转化是通过调用对象里的get方法来实现的,而不是根据字段名

// 伪代码
public class User{
    private String id;
    public String getUserId(){
        return id;
    }
}
public class Test{
    public void test(){
        User user = new User(1);
        JSONObject jsonObject = JSONObject.fromObject(user);
    }
    // 结果为:{"userId":"1"}
}