阿里通用的序列化与反序列化方式

(一) Java本身自带的序列化与反序列化方式Serializable
参考:https://www.cnblogs.com/zhangmingyang/p/10445581.html

(二) 通用的序列化与反序列化方式JSON
fastjson所需的jar包和源码:https://download.csdn.net/download/xinsuimengfei/10451717

FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到

JavaBean。FastJson已经被广泛使用在各种场景,包括cache存储、RPC通讯、MQ通讯、网络协议通讯、Android客户端、Ajax服务器处理程序等等。

参考博客:

https://www.cnblogs.com/qiaoyeye/p/7730288.html

https://blog.csdn.net/m0_37598340/article/details/86490373

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.58</version>
    </dependency>

参考方法:

  1. 将对象序列化成json字符串

public static final String toJSONString(Object object); // 序列化为无格式的json字符串
public static final String toJSONString(Object object, boolean prettyFormat); // 序列化为带格式的json字符串

  1. 将json字符串反序列化成JSONObject或者JSONArray(返回值是Object类型,不要使用了,不然还需要强转,直接用3吧.)

public static final Object parse(String text);

  1. 将json字符串反序列化成对象(如果你拿到的数据是数组,需要加上参数JSONArray.class,否则报错.)

public static final JSONObject parseObject(String text); // 将JSON字符串反序列化成JSON对象
public static final T parseObject(String text, Class clazz); // 将JSON字符串反序列化成对象

4.根据key 得到json中的json数组

public JSONArray getJSONArray(String key)

  1. 根据下标拿到json数组的json对象

public JSONObject getJSONObject(int index)

6.根据key拿到json的字符串值

String com.alibaba.fastjson.JSONObject.getString(String key)

  1. 根据key拿到json的int值

int com.alibaba.fastjson.JSONObject.getIntValue(String key)

  1. 根据key拿到json的boolean值

boolean com.alibaba.fastjson.JSONObject.getBooleanValue(String key)

参考示例1:

1 package com.zmy.faskjson;
2
3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONArray;
5 import com.alibaba.fastjson.JSONObject;
6
7 public class test3
8 {
9 public static void main(String[] args)
10 {
11 String json_str = “{“reviewPics”:null,“extInfoList”:[{“title”:“contentTags”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“desc”:“true”,“defineType”:0},{“title”:“tagIds”,“values”:[“24”,“300”,“852”,“506”,“173”],“desc”:”",“defineType”:0}],“expenseList”:null,“reviewIndexes”:[2],“scoreList”:null}";
12 System.out.println(json_str);
13
14 //将json字符串反序列化成JSON对象
15 JSONObject parseObject = JSON.parseObject(json_str);
16 System.out.println(parseObject);
17
18 //根据key得到json对象当中的json数组
19 JSONArray jsonArray = parseObject.getJSONArray(“extInfoList”);
20 System.out.println(jsonArray);
21
22 //根据下标拿到json数组当中的json对象
23 JSONObject jsonObject = jsonArray.getJSONObject(0);
24 System.out.println(jsonObject);
25
26 //根据key拿到json对象的字符串值
27 String string = jsonObject.getString(“title”);
28 System.out.println(string);
29
30 //根据key拿到json对象的boolean值
31 Boolean boolean1 = jsonObject.getBoolean(“desc”);
32 System.out.println(boolean1);
33
34 //根据key拿到json对象的int值
35 Integer integer = jsonObject.getInteger(“defineType”);
36 System.out.println(integer);
37 }
38 }

运行结果:

{“reviewPics”:null,“extInfoList”:[{“title”:“contentTags”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“desc”:“true”,“defineType”:0},{“title”:“tagIds”,“values”:[“24”,“300”,“852”,“506”,“173”],“desc”:"",“defineType”:0}],“expenseList”:null,“reviewIndexes”:[2],“scoreList”:null}
{“reviewIndexes”:[2],“extInfoList”:[{“title”:“contentTags”,“desc”:“true”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0},{“title”:“tagIds”,“desc”:"",“values”:[“24”,“300”,“852”,“506”,“173”],“defineType”:0}]}
[{“title”:“contentTags”,“desc”:“true”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0},{“title”:“tagIds”,“desc”:"",“values”:[“24”,“300”,“852”,“506”,“173”],“defineType”:0}]
{“title”:“contentTags”,“desc”:“true”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0}
contentTags
true
0

示例程序2:

public class User
{
private Integer id;

private String  name;

private Integer age;

@JSONField(format="yyyy-MM-dd")
private Date createtime;

private String phone;

public Integer getId()
{
	return id;
}
public void setId(Integer id)
{
	this.id = id;
}
public String getName()
{
	return name;
}
public void setName(String name)
{
	this.name = name;
}
public Integer getAge()
{
	return age;
}
public void setAge(Integer age)
{
	this.age = age;
}
public Date getCreatetime()
{
	return createtime;
}
public void setCreatetime(Date createtime)
{
	this.createtime = createtime;
}
public String getPhone()
{
	return phone;
}
public void setPhone(String phone)
{
	this.phone = phone;
}

@Override
public String toString()
{
	return "User [id=" + id + ", name=" + name + ", age=" + age+ ", createtime=" + createtime + ", phone=" + phone + "]";
}

}
代码:

1 import java.util.Date;
2
3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONObject;
5
6 public class Test5
7 {
8 public static void main(String[] args)
9 {
10 User user = new User();
11 user.setId(123456);
12 user.setName(“wtt”);
13 user.setAge(28);
14 user.setCreatetime((Date) new Date());
15
16 System.out.println(user);
17
18 //将对象序列化成json字符串
19 String jsonString = JSON.toJSONString(user,true);
20 System.out.println(jsonString);
21
22 //将json字符串反序列化成JSONObject对象
23 JSONObject parseObject1 = JSON.parseObject(jsonString);
24 System.out.println(parseObject1);
25
26
27 //将json字符串反序列化成JavaBean对象
28 User parseObject = JSON.parseObject(jsonString,User.class);
29 System.out.println(parseObject);
30
31
32
33 }
34 }

运行结果:

User [id=123456, name=wtt, age=28, createtime=Fri Jun 07 16:17:54 CST 2019, phone=null]
{
“age”:28,
“createtime”:“2019-06-07”,
“id”:123456,
“name”:“wtt”
}
{“id”:123456,“createtime”:“2019-06-07”,“name”:“wtt”,“age”:28}
User [id=123456, name=wtt, age=28, createtime=Fri Jun 07 00:00:00 CST 2019, phone=null]

遍历JSON对象的方法:

package com.base.java.json;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Map;

public class app2
{
//遍历JSON 对象({} [])
public static void main(String[] args)
{
//json字符串.
String json_str = “{255:“L1标签”,1225:“核心流量标签”}”;

    //将json字符串反序列化成json对象,并进行遍历.
    JSONObject jsonObject = JSON.parseObject(json_str);
    System.out.println(jsonObject);

    for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
        System.out.println((Object)entry.getKey());
        System.out.println(entry.getValue());
    }

    //json字符串.
    String json_str2 = "[\"1253\",\"3625\"]";

    //将json字符串反序列化成json对象,并进行遍历.
    JSONArray objects = JSON.parseObject(json_str2, JSONArray.class);
    for ( Object obj : objects)
    {
        System.out.println((String) obj);
    }

}

}
运行结果:

{1225:“核心流量标签”,255:“L1标签”}
1225
核心流量标签
255
L1标签
1253
3625

(三) 使用fastjson时,null值在转JSONObject时丢失的问题
参考博客:https://blog.csdn.net/litterfrog/article/details/80083626

package com.base.java.json;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.Map;

public class app
{
public static void main(String[] args)
{
//json字符串.
String json_str = “{“reviewPics”:null,“extInfoList”:[{“title”:“contentTags”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“desc”:“true”,“defineType”:0},{“title”:“tagIds”,“values”:[“24”,“300”,“852”,“506”,“173”],“desc”:”",“defineType”:0}],“expenseList”:null,“reviewIndexes”:[2],“scoreList”:null}";
System.out.println(json_str);

    //将json字符串反序列化成json对象,但是空值为什么没有了呢?
    JSONObject jsonObject = JSON.parseObject(json_str);
    System.out.println(jsonObject.toString());

    //临时的几个方法.
    System.out.println(jsonObject.containsKey("reviewPics"));
    System.out.println(jsonObject.get("reviewPics"));
    System.out.println(jsonObject.containsKey("tmp_key"));
    System.out.println(jsonObject.get("tmp_key"));

    //将空值也给打出来.
    System.out.println(jsonObject.toJSONString());  //不行.
    System.out.println(JSONObject.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue));  //行.

    //遍历这个json对象,会发现空值null也打印出来了.
    for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
        System.out.println((Object)entry.getKey());
        System.out.println(entry.getValue());
    }

}

}
运行结果:

{“reviewPics”:null,“extInfoList”:[{“title”:“contentTags”,“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“desc”:“true”,“defineType”:0},{“title”:“tagIds”,“values”:[“24”,“300”,“852”,“506”,“173”],“desc”:"",“defineType”:0}],“expenseList”:null,“reviewIndexes”:[2],“scoreList”:null}
{“extInfoList”:[{“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0,“title”:“contentTags”,“desc”:“true”},{“values”:[“24”,“300”,“852”,“506”,“173”],“defineType”:0,“title”:“tagIds”,“desc”:""}],“reviewIndexes”:[2]}
true
null
false
null
{“extInfoList”:[{“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0,“title”:“contentTags”,“desc”:“true”},{“values”:[“24”,“300”,“852”,“506”,“173”],“defineType”:0,“title”:“tagIds”,“desc”:""}],“reviewIndexes”:[2]}
{“scoreList”:null,“extInfoList”:[{“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0,“title”:“contentTags”,“desc”:“true”},{“values”:[“24”,“300”,“852”,“506”,“173”],“defineType”:0,“title”:“tagIds”,“desc”:""}],“reviewPics”:null,“reviewIndexes”:[2],“expenseList”:null}
scoreList
null
extInfoList
[{“values”:[“环境优雅”,“性价比高”,“干净卫生”,“停车方便”,“音响效果好”],“defineType”:0,“title”:“contentTags”,“desc”:“true”},{“values”:[“24”,“300”,“852”,“506”,“173”],“defineType”:0,“title”:“tagIds”,“desc”:""}]
reviewPics
null
reviewIndexes
[2]
expenseList
null

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒得睁眼的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值