JSONArray和JSONObject以及JSONConfig

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 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"}
}

你可能感兴趣的:(JSONArray和JSONObject以及JSONConfig)