fastjson使用教程
1.这里推荐一篇博客,博主写的挺好的,我这里做一些fastjson使用举例
https://blog.csdn.net/srj1095530512/article/details/82529759
2.Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言,下面代码演示下阿里fastjson的使用!
3.代码演示
(JSONObject代表json对象,JSONArray代表json对象数组 JSON代表JSONObject和JSONArray的转化)
package com.aop.aspect.validator.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
public class JsonConvert {
/**
* 依赖
* * <dependency>
* * <groupId>com.alibaba</groupId>
* * <artifactId>fastjson</artifactId>
* * <version>1.2.48</version>
* * </dependency>
*
* 如果是springboot 在starter-web中已经有了这个依赖直接用即可
*/
public static void main(String[] args) {
User user1 = new User(1L,"张三","12345678", Collections.singletonList(new Person("zhang", 20)));
User user2 = new User(1L,"李四","12345678", Collections.singletonList(new Person("li", 40)));
User user3 = new User(1L,"王五","12345678", Collections.singletonList(new Person("wang", 50)));
User user4 = new User(1L,"赵六","12345678", Collections.singletonList(new Person("zhao", 60)));
List<User> users = Arrays.asList(user1, user2, user3, user4);
Map<String, User> map = new HashMap<String, User>(4);
map.put("user1",user1);
map.put("user2",user2);
map.put("user3",user3);
map.put("user4",user4);
//java对象转 json串
String string = JSON.toJSONString(user1);
System.out.println(string);
//java对象 转jsonObject对象;
JSONObject o = (JSONObject)JSON.toJSON(user1);
System.out.println(o.getString("username"));
//json串 转回java对象
User parseUser = JSON.parseObject(string,User.class);
System.out.println(parseUser);
System.out.println(parseUser.getUsername());
//JsonObject对象 转回java对象
User user = JSON.toJavaObject(o, User.class);
System.out.println(user);
System.out.println("===================== 分割线 上面是单个对象 json之间互相转换 下面是集合转换===============================");
//java集合对象 转换json串
String listJson = JSON.toJSONString(users);
System.out.println(listJson);
//java集合对象 转JsonObject对象
JSONArray jsonObject = (JSONArray)JSON.toJSON(users);
System.out.println(jsonObject);
//json串 转回 java集合对象
List<User> userList = JSON.parseArray(listJson, User.class);
System.out.println(userList.get(0));
//jsonArray 结合对象转回 java集合对象,这里就要分两步转回了
String jsonObjectStrList = JSON.toJSONString(jsonObject);
List<User> parseArray = JSON.parseArray(jsonObjectStrList, User.class);
System.out.println(parseArray);
System.out.println("===================== 这里单独说下如果bean类中还定义了私有对象如何获取私有变量 ===============================");
//java对象 转jsonObject对象;
JSONObject j = (JSONObject)JSON.toJSON(user1);
//正常获取一般的私有变量
System.out.println(j.getString("username"));
//如果成员变量是java对象,必须用getObject()
JSONArray jsonArray = (JSONArray)j.getObject("list", List.class);
JSONObject personStr = (JSONObject)jsonArray.get(0);
System.out.println(personStr.getString("nickName"));
String mapJson = JSON.toJSONString(map);
System.out.println(mapJson);
Map mapUser = JSON.parseObject(mapJson, Map.class);
System.out.println(mapUser);
Set<String> set = mapUser.keySet();
for (String key: set) {
/*这里的获取到的value值是JSONObject并不user对象,直接会出现转换异常!
如果这样写: User userJson = mapUser.get(key);
Exception in thread "main" java.lang.ClassCastException:
com.alibaba.fastjson.JSONObject cannot be cast to com.aop.aspect.validator.json.User
*/
//下面这样就成功拿到对象,并用get方法获取到元素了
User convertUser = JSON.toJavaObject((JSONObject) mapUser.get(key), User.class);
System.out.println(convertUser.getUsername());
}
// JSON.parseObject和JSON.toJavaObject区别 前面这个方法是自身是json串转回java对象,后面这个是自身JsonObject对象,转回java对象
}
}
package com.aop.aspect.validator.json;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String nickName = "昵称";
private int age;
}
```clike
package com.aop.aspect.validator.json;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.springframework.data.annotation.Id;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
/*
lombok.AllArgsConstructor 增加全参构造器
lombok.NoArgsConstructor 增加无参构造
lombok.RequiredArgsConstructor 增加必选参数构造器
*/
@Id
@NotNull(message = "id不能为空!")
private Long id;
@NotNull(message = "用户名不能为空")
private String username = "youSelf";
@NotNull(message = "密码不能为空")
@Length(min = 8,message = "密码不能小于8位数")
private String password;
private List<Person> list;
}