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 弄混了? &nbsp; 大致的意思就是无法找到返回值对应的r

default V getOrDefault(Object var1, V var2) { Object va

0. 入门介绍 Protobuf有两个大版本,proto2和proto3,proto3相对proto2而言,简言之就是支持更多的语言(Ruby、C#等 ),删除了一些复杂的语法

import com.alibaba.fastjson.JSONObject; public BaseJsonRst exec

方法一 给XXMapper.java加上Mapper注解,如: import org.apache.i