发布于2020-11-19 20:16 阅读(1013) 评论(0) 点赞(20) 收藏(2)
将Javabean对象序列化为JSON字符串,返回JSON字符串的utf-8 bytes
将Javabean对象序列化为JSON字符串,写入到Writer中
将Javabean对象序列化为JSON字符串,按UTF-8编码写入到OutputStream中
4.5 Fastjson Obejct/Map/JSON/String 互转
- 1、什么是fastjson?
- fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
- 系统学习:
- https://www.w3cschool.cn/fastjson/fastjson-jsonpath.html
- 2、使用思路
- 序列化
- String jsonString = JSON.toJSONString(obj); //序列化,各种对象 ----> json格式的字符串
-
- 反序列化
- VO vo = JSON.parseObject("{...}", VO.class); //反序列化 各种对象 <---- json格式的字符串
- VO vo = JSON.parseArray("{...}", VO.class);
-
- 3、关键概念介绍
- 3.1 fastjson主要的使用入口
- Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。
- public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
- public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
- public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
- public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
- public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
- public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
- public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
- public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
-
- 3.2、有关类库的一些说明
- SerializeWriter:相当于StringBuffer
- JSONArray:相当于List<Object>
- JSONObject:相当于Map<String, Object>
- JSON反序列化没有真正数组,本质类型都是List<Object>
- JSON:JSON是一个抽象类,该类实现了JSONAware(转为json串)和JSONStreamAware(将json串写入Appendable中)的接口,同时又是JSONArray(内部实现就是个List)和JSONObject(内部实现就是个Map)的父类。
- JSONObject:json对象,是JSON字符串与pojo对象转换过程中的中间表达类型,实现了Map接口,可以看做是一个模拟JSON对象键值对再加上多层嵌套的数据集合,对象的每一个基本类型属性是map里的一个key-value,一个非基本类型属性是一个嵌套的JSONObject对象(key是属性名称,value是表示这个属性值的对象的JSONObject)。
-
- 详细介绍参考:
- https://github.com/alibaba/fastjson/wiki/JSON_API_cn#parse-pojo-generic
-
- 4、重点使用场景
- 4.1 序列化
- 一个javabean对象 序列化为JSON字符串
- Model model = ...;
- String jsonStr = JSON.toJSONString(model);
-
- User user = new User();
- user.setName("校长");
- user.setAge(3);
- user.setSalary(new BigDecimal("123456789.0123"));
- String jsonString = JSON.toJSONString(user);
- System.out.println(jsonString);
- // 输出 {"age":3,"name":"校长","old":false,"salary":123456789.0123}
-
-
- 将Javabean对象序列化为JSON字符串,返回JSON字符串的utf-8 bytes
- import com.alibaba.fastjson.JSON;
- Model model = ...;
- byte[] jsonBytes = JSON.toJSONBytes(model);
-
- 将Javabean对象序列化为JSON字符串,写入到Writer中
- import com.alibaba.fastjson.JSON;
- Model model = ...;
- Writer writer = ...;
- JSON.writeJSONString(writer, model);
-
- 将Javabean对象序列化为JSON字符串,按UTF-8编码写入到OutputStream中
- import com.alibaba.fastjson.JSON;
- Model model = ...;
- OutputStream os;
- JSON.writeJSONString(os, model);
-
-
- 4.2 反序列化
- 将json字符串 反序列化为 JSONObject对象
- JSONObject jsonObj = JSON.parseObject(jsonStr);
-
- 将json字符串 反序列为 普通javabean对象模型
- Model model = JSON.parseObject(jsonStr, Model.class);
- Model model = JSON.parseArray(jsonStr, MOdel.class);
-
- //例子如下
- String jsonString = "{\"age\":3,\"birthdate\":1496738822842,\"name\":\"校长\",\"old\":true,\"salary\":123456789.0123}";
- User u = JSON.parseObject(jsonString ,User.class);
- System.out.println(u.getName());
- // 输出 校长
-
- String jsonStringArray = "[{\"age\":3,\"birthdate\":1496738822842,\"name\":\"校长\",\"old\":true,\"salary\":123456789.0123}]";
- List<User> userList = JSON.parseArray(jsonStringArray, User.class);
- System.out.println(userList.size());
- // 输出 1
-
-
- 将json字符串反序列化为泛型类型的javabean
- Type type = new TypeReference<List<Model>>() {}.getType();
- List<Model> list = JSON.parseObject(jsonStr, type);
-
-
- 4.3 日期
- Fastjson 处理日期的API很简单,例如:
- JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS")
-
- 使用ISO-8601日期格式
- JSON.toJSONString(obj, SerializerFeature.UseISO8601DateFormat);
-
- 全局修改日期格式
- JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
- JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
-
- 反序列化能够自动识别如下日期格式:
- ISO-8601日期格式
- yyyy-MM-dd
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd HH:mm:ss.SSS
- 毫秒数字
- 毫秒数字字符串
- .NET JSON日期格式
- new Date(198293238)
-
- 4.4 Fastjson 对象或数组转JSON
- 在日志解析,前后端数据传输交互中,经常会遇到 String 与 map、json、xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言、跨前后端的事实上的标准数据交互格式。应该来说各个语言中 解析 json 的库都一大片(具体 json 格式与三方库的介绍请见: http://www.json.org/json-zh.html ),比如 python 都集成在了内置库中,成为标准 API,今天我们要聊的是 java 中如何方便的使用 json 格式。
- package test;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import com.alibaba.fastjson.JSON;
-
- class User {
- private String name;
- private int age;
-
- 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;
- }
-
- @Override
- public String toString() {
- return "User [name=" + name + ", age=" + age + "]";
- }
- };
-
- class UserGroup {
- private String name;
- private List<User> users = new ArrayList<User>();
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public List<User> getUsers() {
- return users;
- }
-
- public void setUsers(List<User> users) {
- this.users = users;
- }
-
- @Override
- public String toString() {
- return "UserGroup [name=" + name + ", users=" + users + "]";
- }
- }
-
- class FastJsonTest {
- public static void main(String[] args) {
- // 构建用户geust
- User guestUser = new User();
- guestUser.setName("guest");
- guestUser.setAge(28);
- // 构建用户root
- User rootUser = new User();
- rootUser.setName("root");
- guestUser.setAge(35);
- // 构建用户组对象
- UserGroup group = new UserGroup();
- group.setName("admin");
- group.getUsers().add(guestUser);
- group.getUsers().add(rootUser);
- // 用户组对象转JSON串
- String jsonString = JSON.toJSONString(group);
- System.out.println("jsonString:" + jsonString);
- // JSON串转用户组对象
- UserGroup group2 = JSON.parseObject(jsonString, UserGroup.class);
- System.out.println("group2:" + group2);
-
- // 构建用户对象数组
- User[] users = new User[2];
- users[0] = guestUser;
- users[1] = rootUser;
- // 用户对象数组转JSON串
- String jsonString2 = JSON.toJSONString(users);
- System.out.println("jsonString2:" + jsonString2);
- // JSON串转用户对象列表
- List<User> users2 = JSON.parseArray(jsonString2, User.class);
- System.out.println("users2:" + users2);
- }
- }
-
- //输出结果:
- jsonString:{"name":"admin","users":[{"age":35,"name":"guest"},{"age":0,"name":"root"}]}
- group2:UserGroup [name=admin, users=[User [name=guest, age=35], User [name=root, age=0]]]
- jsonString2:[{"age":35,"name":"guest"},{"age":0,"name":"root"}]
- users2:[User [name=guest, age=35], User [name=root, age=0]]
-
-
- 4.5 Fastjson Obejct/Map/JSON/String 互转
- list<----->json
- public static void json2List(){
- //List -> JSON array
- List<Bar> barList = new ArrayList<Bar>();
- barList.add(new Bar());
- barList.add(new Bar());
- barList.add(new Bar());
- String json= JSON.toJSONString(barList, true);
- System.out.println(json);
- //JSON array -> List
- List<Bar> barList1 = JSON.parseArray(json,Bar.class);
- for (Bar bar : barList1) {
- System.out.println(bar.toString());
- }
- }
-
- map<---->json
- public static void map2JSON(){
- Map map = new HashMap();
- map.put("a","aaa");
- map.put("b","bbb");
- map.put("c","ccc");
- String json=JSON.toJSONString(map);
- System.out.println(json);
- Map map1 = JSON.parseObject(json);
- for (Object o : map.entrySet()) {
- Map.Entry<String,String> entry = (Map.Entry<String,String>)o;
- System.out.println(entry.getKey()+"--->"+entry.getValue());
- }
- }
-
- public static void json2Map(){
- //Map -> JSON
- Map<String,Bar> map = new HashMap<String, Bar>();
- map.put("a",new Bar());
- map.put("b",new Bar());
- map.put("c",new Bar());
- String json = JSON.toJSONString(map,true);
- System.out.println(json);
- //JSON -> Map
- Map<String,Bar> map1 = (Map<String,Bar>)JSON.parse(json);
- for (String key : map1.keySet()) {
- System.out.println(key+":"+map1.get(key));
- }
- }
-
- array---->json
- public static void array2JSON(){
- String[] arr_String = {"a","b","c"};
- String json_arr_String = JSON.toJSONString(arr_String,true);
- System.out.println(json_arr_String);
- JSONArray jsonArray = JSON.parseArray(json_arr_String);
- for (Object o : jsonArray) {
- System.out.println(o);
- }
- System.out.println(jsonArray);
- }
- public static void array2JSON2(){
- Bar[] arr_Bar = {new Bar(),new Bar(),new Bar()};
- String json_arr_Bar = JSON.toJSONString(arr_Bar,true);
- System.out.println(json_arr_Bar);
- JSONArray jsonArray = JSON.parseArray(json_arr_Bar);
- for (Object o : jsonArray) {
- System.out.println(o);
- }
- System.out.println(jsonArray);
- }
-
-
- 4.6 其他常用API及方法
- 遍历JSONArray
- 第一种for循环
- JSONArray seriesArr = new JSONArray();
- for(int i=0;i<seriesArr .size();i++){
- JSONObject object = eggsArr.getJSONObject(i);
- }
-
- 第二种for增强
- JSONArray pzListArr = new JSONArray();
- for (Object obj:pzListArr) {
- JSONObject dataObj = JSONObject.parseObject(obj.toString());
- }
-
原文链接:https://blog.csdn.net/lucyshimeiling/article/details/109747301
作者:小胖子爱java
链接:http://www.javaheidong.com/blog/article/900/6e1eedf0bcd5a2a8490b/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!