Jackson与FastJson的json解析
FastJson对应的Jackson相关对象/操作
对象/操作 | FastJson | Jackson |
---|---|---|
json对象 | JSONObject | JsonNode |
json集合 | JSONArrray | ArrayNode |
创建json对象 | JSON.parseObject() | ObjectMapper.readTree() |
获取json对象中的json对象 | jsonObject.getJSONObject() | jsonNode.with() |
获取json对象中的集合对象 | jsonObject.getJSONArray() | jsonNode.withArray() |
FastJson的json操作样例
1、实体类
public class User {
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddTime() {
return addTime;
}
public void setAddTime(String addTime) {
this.addTime = addTime;
}
String userName;
int age;
String addTime;
}
public class School {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddTime() {
return addTime;
}
public void setAddTime(String addTime) {
this.addTime = addTime;
}
String name;
int age;
String addTime;
}
2、FastJson操作
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import base.entity.School;
import base.entity.User;
public class FastjsonTest {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
String jsonStr1 = "{\"userName\":\"小白\",\"age\":18,\"addTime\":1691851686568}";
String jsonStr2 = "[{\"userName\":\"小白\",\"age\":18,\"addTime\":1691851686568}, {\"userName\":\"小黑\",\"age\":81,\"addTime\":1691851686568}]";
String jsonStr3 = "{\"users\":[" + "{\"userName\":\"小白\",\"age\":18,\"addTime\":1691851686568},"
+ " {\"userName\":\"小黑\",\"age\":81,\"addTime\":1691851686568}]"
+ ",\"TM \":1666553371554 ,\"BJ\":\"三年级\",\"XX\":{\"name\":\"育英学校\",\"age\":18,\"addTime\":1691851686568}}";
// 1.最简单的常用方法,直接将一个json转换成实体类。
// 简单类型的时候,这样最方便
User user1 = JSON.parseObject(jsonStr1, User.class);
System.out.println("简单转换1: " + user1.getUserName());
// -1)class转json。
String userJson = JSON.toJSONString(user1);
System.out.println("userJson: " + userJson);
// 对象转json
String json1 = JSON.toJSONString(user1);
;
System.out.println("json1: " + json1);
// 2.把Json转换成map,必须使用 TypeReference , map的类型定义 可以根据实际情况来定,比如若值都是String那么就可以
// Map<String, String>
Map<String, Object> userMap = JSON.parseObject(jsonStr1, Map.class);
System.out.println("map: " + userMap.get("userName"));
// -2)map转Json
String mapJson = JSON.toJSONString(userMap);
System.out.println("mapJson: " + mapJson);
// 3.list<Bean>模式。
List<User> userList1 = JSON.parseArray(jsonStr2, User.class);
System.out.println("list1: " + userList1.get(0).getUserName());
// -3)list转Json
String listJson = JSON.toJSONString(userList1);
System.out.println("listJson: " + listJson);
// list里面为string
String strList1 = JSON.toJSONString(userList1);
System.out.println("strList1: " + strList1);
// 4.Bean[] 数组。
User[] userArray;
// 5、创建json对象
JSONObject jsonObject = JSON.parseObject(jsonStr3);
// 6、获取json对象中的集合对象
JSONArray jsonArray = jsonObject.getJSONArray("users");
// 6.1 将数组转字符串
String arrayStr = JSON.toJSONString(jsonArray);
List<User> userList2 = new ArrayList<User>();
// 6.2 将字符串转list.
userList2 = JSON.parseArray(arrayStr, User.class);
System.out.println("list2: " + userList2.get(0).getUserName());
// 7、获取json对象中的json对象
String str = jsonObject.getString("XX");
School school1 = JSON.parseObject(str, School.class);
System.out.println("school1: " + school1.getName());
// 8、获取json对象中的key值
String str1 = jsonObject.getString("BJ");
System.out.println("str1: " + str1);
}
}
Jackson的json操作样例
1、实体类
同上。
2、Jackson操作
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.fasterxml.jackson.databind.node.ObjectNode;
import base.entity.School;
import base.entity.User;
public class JacksonTest {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
String jsonStr1 = "{\"userName\":\"小白\",\"age\":18,\"addTime\":1691851686568}";
String jsonStr2 = "[{\"userName\":\"小白\",\"age\":18,\"addTime\":1691851686568}, {\"userName\":\"小黑\",\"age\":81,\"addTime\":1691851686568}]";
String jsonStr3 = "{\"users\":[" + "{\"userName\":\"小白\",\"age\":18,\"addTime\":1691851686568},"
+ " {\"userName\":\"小黑\",\"age\":81,\"addTime\":1691851686568}]"
+ ",\"TM \":1666553371554 ,\"BJ\":\"三年级\",\"XX\":{\"name\":\"育英学校\",\"age\":18,\"addTime\":1691851686568}}";
ObjectMapper objectMapper = new ObjectMapper();
// 1.最简单的常用方法,直接将一个json转换成实体类。
// 简单类型的时候,这样最方便
User user1 = objectMapper.readValue(jsonStr1, User.class);
System.out.println("简单转换1: " + user1.getUserName());
// 用 TypeReference 也可以,但是麻烦 不如第一种直接 TypeReference 主要针对繁杂类型
User user2 = objectMapper.readValue(jsonStr1, new TypeReference<User>() {
});
System.out.println("简单转换2: " + user2.getUserName());
// -1)class转json。
String userJson = objectMapper.writeValueAsString(user1);
System.out.println("userJson: " + userJson);
// 2.把Json转换成map,必须使用 TypeReference , map的类型定义 可以根据实际情况来定,比如若值都是String那么就可以
// Map<String, String>
Map<String, Object> userMap = objectMapper.readValue(jsonStr1, new TypeReference<Map<String, Object>>() {
});
System.out.println("map: " + userMap.get("userName"));
// -2)map转json
String mapJson = objectMapper.writeValueAsString(userMap);
System.out.println("mapJson: " + mapJson);
// 3.list<Bean>模式,必须用 TypeReference。
List<User> userList1 = objectMapper.readValue(jsonStr2, new TypeReference<List<User>>() {
});
System.out.println("list1: " + userList1.get(0).getUserName());
// -3) list转json
String listJson = objectMapper.writeValueAsString(userList1);
System.out.println("listJson: " + listJson);
// 4.Bean[] 数组,必须用 TypeReference。
User[] userArray;
userArray = objectMapper.readValue(jsonStr2, new TypeReference<User[]>() {
});
System.out.println("array: " + userArray[0].getUserName());
// -4) 数组转json
String arrayJson = objectMapper.writeValueAsString(userArray);
System.out.println("arrayJson: " + arrayJson);
// 5、创建json对象
JsonNode jsonNode = objectMapper.readTree(jsonStr3);
// -5) JsonNode转json
String nodeJson = objectMapper.writeValueAsString(jsonNode);
System.out.println("nodeJson: " + nodeJson);
// 6、获取json对象中的集合对象
ArrayNode arrayNode = jsonNode.withArray("users");
List<User> userList2 = new ArrayList<User>();
userList2 = objectMapper.readValue(arrayNode.toString(), new TypeReference<List<User>>() {
});
System.out.println("list2: " + userList2.get(0).getUserName());
// 7、获取json对象中的json对象
ObjectNode objectNode1 = jsonNode.with("XX");
School school1 = objectMapper.readValue(objectNode1.toString(), School.class);
System.out.println("school1: " + school1.getName());
// 8、获取json对象中的key值
JsonNode jsonNode1 = jsonNode.get("BJ");
System.out.println("jsonNode1: " + jsonNode1.toString().replaceAll("\"", "").trim());
System.out.println("jsonNode1: " + jsonNode1.asText("BJ"));
// 只能取第一层key,key不存在返回null
JsonNode name1 = jsonNode.get("BJ");
// 只能取第一层key,key不存在返回MissingNode
JsonNode name2 = jsonNode.path("BJ");
// 全部key,取第一个,key不存在返回MissingNode,空字符串
JsonNode name3 = jsonNode.findPath("BJ");
// 全部key,取第一个,key不存在返回null,空指针
JsonNode name4 = jsonNode.findValue("BJ");
// 查找全部的key
List<JsonNode> name5 = jsonNode.findValues("BJ");
// 已经key路径查找
JsonNode name6 = jsonNode.at("/XX/name");
// 9、 获取类型
JsonNodeType nodeType = jsonNode.getNodeType();
// 判断是否是数组
boolean array = jsonNode.isArray();
// 判断是否是对象
boolean object = jsonNode.isObject();
// 判断是否是值
boolean valueNode = jsonNode1.isValueNode();
String s1 = jsonNode1.asText("BJ");
JsonNode jsonNode2 = jsonNode.get("XX");
System.out.println("jsonNode2: " + jsonNode2.toString().replaceAll("\"", "").trim());
System.out.println("jsonNode2: " + jsonNode1.asText("XX"));
}
}
3、其他说明
JackSon 默认是通过驼式命名法 ,有时比较特殊,比如映入其他系统的字段,可能都是大写,
可以通过@JsonProperty(value = “GS”)处理。
@JsonProperty(value = "GS")
private String GS;