fastjson序列化和反序列化Map排序问题
阅读数:515 评论数:0
跳转到新版页面分类
python/Java
正文
一、概述
1、序列化的作用
个人理解它的主要作用是为了对象可以跨平台存储和进行网络传输,在网络传输的时候,我们需要经过 IO
,而 IO
传输支持的就是字节数组这种格式,所以序列化过后可以更好的传输。
2、常见序列化方式
json |
它的优点是可读性很高,缺点那就是体积较大,很存在很多冗余内容,比如双引号,花括号。 常见的json工具有:fastjson、jackson |
xml | 优缺点和json类似 |
二进制 |
优点主要是性能高,体积小,缺点就是易读性差 常见的工具有:protobuf、thrift |
二、fastjson应用于map
1、序列化
HashMap 是不能保证遍历输出顺序的,如果要保证按插入顺序遍历可以使用 LinkedHashMap,如果要对 Key 排序输出可以使用 TreeMap。
// 按插入顺序
Map<String, Object> map = new LinkedHashMap<>();
map.put("B", 2);
map.put("A", 1);
map.put("C", 3);
System.out.println(JSON.toJSONString(map)); // {"B":2,"A":1,"C":3}
// 按 Key 排序
Map<String, Object> map = new TreeMap<>();
map.put("B", 2);
map.put("A", 1);
map.put("C", 3);
System.out.println(JSON.toJSONString(map)); // {"A":1,"B":2,"C":3}
2、反序列化
fastjson 的反序列化方法有个 TypeReference 参数,可以指定反序列化方式:
String str = "{\"B\":2,\"A\":1,\"C\":3}";
// 按输入顺序
Map<String, Object> map1 = JSON.parseObject(str, new TypeReference<LinkedHashMap<String, Object>>() {});
for (Map.Entry<String, Object> entry : map1.entrySet()) {
System.out.println(entry.getKey());
}
// 输出:
B
A
C
// 按 Key 排序
Map<String, Object> map2 = JSON.parseObject(str, new TypeReference<TreeMap<String, Object>>() {});
for (Map.Entry<String, Object> entry : map2.entrySet()) {
System.out.println(entry.getKey());
}
// 输出:
A
B
C
相关推荐
一、默认日期序列化
1、fastjson默认使用的序列格式
public static String DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:m
一、HashMap
HashMap使用链表法避免哈希冲突(相同hash值),当链表长度大于TREEIFY_THRESHOLD(默认为8)时,将链表转换为红黑树。当小于等于UNTREEIFY_THRES
跳表是一种采用了空间换时间思想的数据结构。它会随机地将一些节点提升到更高的层次,以创建一种逐层的数据结构,以提高操作的速度。
<img src="http://1024s.top/
一、jps
Java virtual machine Process Status Tool
主要用来输出jvm中运行的进程状态信息,语法格式如下:
jps [options] [hostid]
-q
public class User {
@JSONField(name = "userId")
private int id;
@JSONField(serialize =
原因很简单,就一句话,是不是resultType 和resultMap 弄混了?
大致的意思就是无法找到返回值对应的r
0. 入门介绍
Protobuf有两个大版本,proto2和proto3,proto3相对proto2而言,简言之就是支持更多的语言(Ruby、C#等 ),删除了一些复杂的语法
方法一
给XXMapper.java加上Mapper注解,如:
import org.apache.i