十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FastJson

FastJson 一、FastJson 简介FastJson 是阿里巴巴开源的高性能 JSON 处理库在 Java 环境下提供了对象与 JSON 文本之间的快速转换能力。本文通过一个完整的 Demo演示 FastJson 在 JavaBean、JSONObject、JSONArray 以及 JSON 文本之间的相互转换。二、环境准备在开始之前请确认项目中已引入 FastJson 依赖并准备好以下三个用于演示的 JavaBean 类。1. User 类这是关于FastJson的一个使用Demo在Java环境下验证的class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } }2. Group 类import java.util.ArrayList; import java.util.List; class Group { private int id; private String name; private ListUser list new ArrayListUser(); public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } public Listlt;Usergt; getList() { return list; } public void setList(Listlt;Usergt; list) { this.list list; } }3. Weibo 类class Weibo { private String id; private String city; public Weibo(String id, String city) { this.id id; this.city city; } public Weibo() { } public String getId() { return id; } public void setId(String id) { this.id id; } public String getCity() { return city; } public void setCity(String city) { this.city city; } }三、FastJson 核心转换示例下面通过多个方法演示 FastJson 在不同数据类型之间的转换包括 JSON 文本转 JavaBean、JSON 文本转 JSONArray、JavaBean 转 JSON 文本、JavaBean 转 JSONObject 等场景。import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** 这是关于FastJson的一个使用Demo在Java环境下验证的 使用的时候可以参照这个例子进行回忆 备注下面写的Json格式的数据前面的\意思是告诉编译器忽略掉它后面的。 后面定义有三个类User、Group、Weibo author liuzhao */ public class JsonDemo { public static void main(String[] args) { json2JsonObjectM1();//将Json文本数据信息转换为JsonObject对象然后利用键值对的方式获取信息 json2BeanM2();//将Json文本数据转换为JavaBean数据 json2JSONArrayM3();//将json数据转化为JSONArray: json2JavaBeanM4();//将JSON文本转换为JavaBean的集合转换为单纯的1个ObjectparseObject(String text, Classlt;Tgt; clazz); bean2JsonM5();//将JavaBean转换为Json格式的数据/Json文本 用户数据的传递例如上传服务器 bean2JSONObjectM6();//将JavaBean转换为JSON对象 complexExampleM7();//一个相对复杂的例子 complex2JsonM8();//一个复杂的Object到Json的Demo complexMap2JsonM9();//将Map数据转换为JsonString的Demo这个对RedBoy服务端不就直接破了嘛 } /** 将Json文本数据信息转换为JsonObject对象然后利用键值对的方式获取信息 / private static void json2JsonObjectM1() { //一个JsonObject文本数据 String s {name:liuzhao}; //将JsonObject数据转换为Json JSONObject object JSON.parseObject(s); //利用键值对的方式获取到值 System.out.println(object.get(name)); /* 打印 liuzhao */ } /** 将Json文本数据转换为JavaBean数据 需要注意的是这时候的Json文本信息中的键的名称必须和JavaBean中的字段名称一样键中没有的在这个JavaBean中就显示为null */ private static void json2BeanM2() { String s {id:0375,city:平顶山}; //一个简单方便 的方法将Json文本信息转换为JsonObject对象的同时转换为JavaBean对象 Weibo weibo JSON.parseObject(s, Weibo.class);//Weibo类在下边定义 System.out.println(weibo.getId()); System.out.println(weibo.getCity()); //打印的结果 0375 // 平顶山 } /** 将Map类型的数据转换为JsonString */ private static void complexMap2JsonM9() { Group group new Group(); group.setId(1); group.setName(group); User user1 new User(); user1.setId(2); user1.setName(user1); User user2 new User(); user2.setId(3); user2.setName(user2); group.getList().add(user1); group.getList().add(user2); MapInteger, Object map new HashMapInteger,Object(); map.put(1, No.1); map.put(2, No.2); map.put(3, group.getList()); String jsonString JSON.toJSONString(map); System.out.println(jsonString); /** 输出{1:No.1,2:No.2,3:[{id:2,name:user1},{id:3,name:user2}]} */ } /** 由一个复杂的Object到Json的Demo */ private static void complex2JsonM8() { Group group new Group(); group.setId(1); group.setName(group); User user1 new User(); user1.setId(2); user1.setName(user1); User user2 new User(); user2.setId(3); user2.setName(user2); group.getList().add(user1); group.getList().add(user2); String jsonString JSON.toJSONString(group); System.out.println(jsonString); /** 输出{id:1,list:[{id:2,name:user1},{id:3,name:user2}],name:group} */ } /** 一个相对复杂的例子 JSON文本数据 首先是JSONObject转换为JSONArray 然后将JSONArray转换为JavaBean */ private static void complexExampleM7() { String s {js:[{id:110000,city:北#001京市},{id:110000,city:北#002京市} ,{id:110000,city:北#002京市},{id:110000,city:北#002京市}, {id:110000,city:#006北#005京市}, {id:110000,city:北#002京市}, {id:110000,city:北#002京市},{id:120000,city:天#009津市}]}; JSONObject object JSON.parseObject(s); Object jsonArray object.get(js); System.out.println(jsonArray); Listlt;Weibogt; list JSON.parseArray(jsonArray, Weibo.class); for (Weibo weibo : list) { System.out.println(weibo.getCity()); } } /** 将JavaBean转换为JSON对象 / private static void bean2JSONObjectM6() { Weibo weibo new Weibo(0373, 洛阳); JSONObject json (JSONObject) JSON.toJSON(weibo); System.out.println(json.get(id)); /* 打印 0373 */ } /** 将JSON文本转换为JavaBean的集合 内部实现肯定是首先转换为JSONArray然后再转换为List集合 / private static void json2JavaBeanM4() { String s [{id:0375,city:平顶山},{id:0377,city:南阳}]; ListWeibo list JSON.parseArray(s, Weibo.class); for (Weibo weibo : list) { System.out.println(weibo.getCity()); } /* 打印 平顶山 南阳 */ } /** 将json数据转化为JSONArray: 注意获取到JSONArray之后我们这里只是获取到JSONArray而不是JavaBean的List集合 获取JSONArray中的数据转换为String类型需要在外边加; / private static void json2JSONArrayM3() { String s [{id:0375,city:平顶山},{id:0377,city:南阳}]; //将JSON文本转换为JSONArray JSONArray array JSON.parseArray(s); //这行必须写必须加上;不然会报出类型强转异常 String str array.get(1); System.out.println(array.get(0)); JSONObject object JSON.parseObject(str); System.out.println(object.get(id)); /* {city:平顶山,id:0375} 0377 */ } /** 将JavaBean转换为Json格式的数据/Json文本 用户数据的传递例如上传服务器 / private static void bean2JsonM5() { Weibo weibo new Weibo(123456, 上海); String string JSON.toJSONString(weibo); System.out.println(string); /* 打印 {city:上海,id:123456} */ } }四、总结本文通过一个完整的 Demo 演示了 FastJson 在 JavaBean、JSONObject、JSONArray 以及 JSON 文本之间的相互转换。下面梳理几个核心方法的适用场景JSON.parseObject(String text)适用于将 JSON 文本解析为 JSONObject再通过键值对方式读取字段适合结构简单、无需强类型的场景。JSON.parseObject(String text, ClassT clazz)适用于将 JSON 文本直接转换为指定类型的 JavaBean是日常开发中最常用的反序列化方式。JSON.parseArray(String text)适用于将 JSON 数组文本解析为 JSONArray适合需要保留原始数组结构或逐项处理的场景。JSON.parseArray(String text, ClassT clazz)适用于将 JSON 数组文本直接转换为 JavaBean 的 List 集合便于后续遍历和业务处理。JSON.toJSONString(Object object)适用于将 JavaBean、Map、List 等对象序列化为 JSON 文本常用于接口返回、数据上传等场景。JSON.toJSON(Object javaObject)适用于将 JavaBean 转换为 JSONObject 或 JSONArray便于在内存中以 JSON 结构继续操作。在使用 FastJson 时有几点需要特别注意键名匹配将 JSON 文本转换为 JavaBean 时JSON 中的键名必须与 JavaBean 的字段名保持一致否则对应字段会解析为 null。类型转换从 JSONArray 中取出元素后若需转换为 JSONObject 或 String要注意类型强转的写法必要时通过拼接空字符串等方式避免类型转换异常。泛型与集合解析泛型集合时应使用带 Class 参数的 parseArray 方法以便 FastJson 正确识别目标元素类型。依赖版本不同版本的 FastJson 在部分 API 行为上可能存在差异建议根据项目实际需求选择稳定的版本。更多详细用法可参考以下资料FastJson 官方 GitHub 仓库FastJson Wiki 文档
返回列表