先说不同点
1. 当对象中有属性为null的时候,fastjson默认是除null的,转后的字符串是不包含为null的那个属性 (见31行)
如果转map会丢失属性 (见40行)
2.相反的jackjson则不会丢失属性,jackjson会保留为null的那条属性 (见50行)
3.同样是取某个值.fastjson取出来的值不带" " 双引号 ,jackjson带" " 双引号 (见34 63 行)
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cnczsq.mall.elephant.v1.model.User;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @author : zhang sq
* @date : 2019/9/10 11:15
**/
public class FastTest {
public static void main(String[] args) {
//FastJson start
String result="{\"resultCode\":\"00000000\",\"resultMsg\":\"SUCCESS\",\"data\":\n" +
"{\"accountId\":\"15674752678246536\",\"username\":\"空白°\",\"nickname\":\"空白°\",\"safeUsername\":null,\"email\":null,\"cellPhone\":\"15901414066\",\n" +
"\"identifier\":\"15674752678246536\",\"verifyCode\":null,\"token\":null,\"password\":\"5EF07368259A14E0597DE114636DEF7C\",\"st\":null,\"passMd5ed\":false,\n" +
"\"newPassword\":null,\"hasPwd\":false,\"wayRegister\":null,\"userType\":\"无\",\"parentId\":null,\"state\":1,\"enable\":null,\"freezeOpinion\":null,\"ntfl\":\"0\",\n" +
"\"remoteHost\":null,\"lastLoginAt\":null,\"createAt\":\"2019-09-03 09:47:47\",\"updateAt\":\"2019-09-09 15:34:40\",\"wxUnionId\":null,\"qqOpenId\":null,\n" +
"\"wbUId\":null,\"city\":\"北京\",\"birthday\":0,\"professional\":null,\"gender\":2,\"signature\":null,\n" +
"\"avatar\":\"group1/M00/00/24/Cg4BSl1vJ9SAeWBHAAGe2f-xqGs298.jpg\"}}";
//一个对象里面套一个对象, 去对象里面对象的某个值
String string = JSONObject.parseObject(result).getJSONObject("data").getString("cellPhone");
System.out.println("cellPhone"+string); //cellPhone15901414066
User user=new User(1,null,18,"武汉","123",true);
//fastjson对象转json字符串
String userString = JSON.toJSONString(user);
System.out.println(userString); //{"address":"武汉","age":18,"id":1,"isParent":true,"tagId":"123"}
//fastjson 取json字符串里面的某一个值
String address = JSON.parseObject(userString).getString("address");
System.out.println(address); //武汉
//fastjson json字符串转回对象
User user1 = JSON.parseObject(userString, User.class);
System.out.println(user1); //User(id=1, name=null, age=18, address=武汉, tagId=123, isParent=true)
//fastjson json字符串转成map
Map map = JSON.parseObject(userString, Map.class);
System.out.println(map); //{address=武汉, isParent=true, tagId=123, id=1, age=18}
//FastJson end
//JackJson start
System.out.println("JackJson start");
User jsckUser=new User(1,null,18,"武汉","123",true);
ObjectMapper mapper = new ObjectMapper();
try {
//jackjson 对象转字符串
String jsckUer1 = mapper.writeValueAsString(jsckUser);
System.out.println(jsckUer1); //{"id":1,"name":null,"age":18,"address":"武汉","tagId":"123","isParent":true}
//jackjson 对象转字节串
byte[] bytes = mapper.writeValueAsBytes(jsckUser);
System.out.println(Arrays.toString(bytes));
//jackjson 字符串转回对象
User user2 = mapper.readValue(jsckUer1, User.class);
System.out.println(user2); //User(id=1, name=null, age=18, address=武汉, tagId=123, isParent=true)
//jackjson 字符串转map
Map map2 = mapper.readValue(jsckUer1, Map.class);
System.out.println(map2); //{id=1, name=null, age=18, address=武汉, tagId=123, isParent=true}
//jackjson取json字符串的某个值
JsonNode jsonNode = mapper.readTree(jsckUer1);
String address2 = jsonNode.get("address").toString();
System.out.println(address2); //"武汉"
String tagId = jsonNode.get("tagId").toString();
System.out.println(tagId); //"123"
//jackJson 集合对象转字符串 字符串转回集合对象
List<User> userList=new ArrayList<>();
userList.add(user);
userList.add(jsckUser);
String asString = mapper.writeValueAsString(userList);
List<User> beanList = mapper.readValue(asString, new TypeReference<List<User>>() {});
System.out.println(beanList); //[User(id=1, name=null, age=18, address=武汉, tagId=123, isParent=true), User(id=1, name=null, age=18, address=武汉, tagId=123, isParent=true)]
} catch (Exception e) {
e.printStackTrace();
}
}
}