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"}
}
上一篇: NSUOJ - 找子串 - Problem 2701
下一篇: TypeScript基本类型
推荐阅读