Json,是一种保持键值对格式的String类型数据,常见于前后端交互过程中的数据传输。比如:SpringMVC的@Responsebody,还有对应的阿里巴巴总结的FastJson工具包。
今天,由于开发正好有用到这个部分,我想从几个实际的例子去总结下FastJson的使用方式,以便阶段性回顾。
环境配置:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
1. Object 转Json格式的字符串相互转换
- Object->Json(String):主要用到的方法是:
1)JSON.toJSONString(Object),可见下面的例子:
User.java
@Getter
@Setter
public class User {
@JSONField(name = "用户名", ordinal = 2)
private String username;
@JSONField(name = "密码", ordinal = 1)
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
UserGroup.java
@Getter
@Setter
public class UserGroup {
@JSONField(name="组名")
private String name;
@JSONField(name="组详情")
private List<User> users = new ArrayList<User>();
public UserGroup(){}
public UserGroup(String name,List<User> users){
this.name = name;
this.users = users;
}
@Override
public String toString() {
return "UserGroup [name=" + name + ", users=" + users + "]";
}
}
测试类:Z_Test
public class Z_Test {
/**
* java对象转 json字符串
*/
@Test
public void objectTOJson(){
//简单java类转json字符串
User user = new User("dmego", "123456");
String UserJson = JSON.toJSONString(user);
System.out.println("java->json:"+UserJson);
//List<Object>转json字符串
User user1 = new User("zhangsan", "123123");
User user2 = new User("lisi", "321321");
List<User> users = new ArrayList<User>();
users.add(user1);
users.add(user2);
String ListUserJson = JSON.toJSONString(users);
System.out.println("List->json:"+ListUserJson);
//复杂java类转json字符串
UserGroup userGroup = new UserGroup("userGroup", users);
String userGroupJson = JSON.toJSONString(userGroup);
System.out.println("复杂obj->json:"+userGroupJson);
}
- Json(String)->Object,主要用到的方法是
1)JSONObject.parseObject(jsonString):这个方法主要是用于后面取属性值;
2)JSON.parseObject(jsonString, Oject.class):这个则直接转为对象;
3)JSON.parseArray(jsonString,Object.class):这个则转为集合对象;
测试方法:
/**
* json字符串转java对象
* 注:字符串中使用双引号需要转义 (" --> \"),这里使用的是单引号
*/
@Test
public void JsonTOObject(){
/* json字符串转简单java对象
* 字符串:{"密码":"123456","用户名":"dmego"}*/
String jsonStr1 = "{'密码':'123456','用户名':'dmego'}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr1);
String rs = jsonObject.get("密码").toString();
System.out.println("rs = " + rs);
User user = JSON.parseObject(jsonStr1, User.class);
System.out.println("json->object:"+user.toString());
/*
* json字符串转List<Object>对象
* 字符串:[{"密码":"123123","用户名":"zhangsan"},{"密码":"321321","用户名":"lisi"}]
*/
String jsonStr2 = "[{'密码':'123123','用户名':'zhangsan'},{'密码':'321321','用户名':'lisi'}]";
List<User> users = JSON.parseArray(jsonStr2, User.class);
System.out.println("json->List:"+users.toString());
/*json字符串转复杂java对象
* 字符串:{"name":"userGroup","users":[{"密码":"123123","用户名":"zhangsan"},{"密码":"321321","用户名":"lisi"}]}
* */
String jsonStr3 = "{'组名':'userGroup','组详情':[{'密码':'123123','用户名':'zhangsan'},{'密码':'321321','用户名':'lisi'}]}";
UserGroup userGroup = JSON.parseObject(jsonStr3, UserGroup.class);
System.out.println("json->复杂obj:"+userGroup);
}
}
2. 注解@JSONField
@JSONField注解的四个常用属性总结
- 网上对于FastJson的使用例子确实很多,不过,自己敲一遍确实不一样:发现细节。IDEA导入Junit测试包时,并不需要在pom文件里加入junit的依赖,直接按Alt+Shift+Enter就可以导入;
- 自己敲一遍和通过书写的方式再梳理一遍,感觉又不一样:抓重点。在FastJson包里有很多其他方法,比如,NameFilter,ContextValueFilter接口等,虽然有看过,但在梳理的过程中发现这两部分有点难懂,且不是重点,可以暂时不用看。
- 其他:分享这件事,确实令人很愉快。让自己的思想通过互联网有机会与有共同兴趣爱好的人一起讨论,真的很开心,希望自己继续保持。加油!
网友评论