json字符串转map 字段顺序错乱问题
参考声明1:https://blog.csdn.net/maxi1234/article/details/124847267
说一下我使用的场景:就是有一个需求是写一个接口,里面要求返回的数据字段顺序是有要求的,返回数据我是用hashmap
封装的然后返回的,但是字段顺序却不是按照我put
的时候来的.所以在新建map
的时候我们将hashmap
换成linkedHashMap
.再加上下面的 Map paraMap = JSON.parseObject(content, LinkedHashMap.class, Feature.OrderedField);
就可以了.
引入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
默认可以使用JSON.parseObject将字符串转成Map,但是如果json中有多个key-value,则转换后的顺序可能颠倒。如下
public static void main(String[] args) {
String content = "{\"text1\":\"123\",\"text2\":\"456\",\"text3\":\"789\"}";
Map paraMap = JSON.parseObject(content);
System.out.println(paraMap.toString());
}
运行结果:
{"text3":"789","text1":"123","text2":"456"}
使用JSON.parseObject(content, LinkedHashMap.class, Feature.OrderedField)可以解决这个问题
public static void main(String[] args) {
String content = "{\"text1\":\"123\",\"text2\":\"456\",\"text3\":\"789\"}";
Map paraMap = JSON.parseObject(content, LinkedHashMap.class, Feature.OrderedField);
System.out.println(paraMap.toString());
}
运行结果:
{text1=123, text2=456, text3=789}
参考声明2:https://www.cnblogs.com/wlstudy09/p/16454202.html
用到是阿里巴巴的fastjson,读取只需要加上 Feature.OrderedField 参数
JSONObject.parseObject(param,Feature.OrderedField)
写出则需要将实体类加上注解(注解这个我没有试过,看到了就记录一下)
@AllArgsConstructor
@NoArgsConstructor
@Data
class People {
@JSONField(ordinal = 1)
private Integer id;
@JSONField(ordinal = 2)
private String name;
@JSONField(ordinal = 3)
private Map<String,Object> map;
}
但是不会保证嵌套的map是有序的,但是我们可以使用LinkedHashMap进行存储数据,LinkedHashMap是双端队列,存储的是有序的。
测试代码如下
public class JsonTest {
public static void main(String[] args) {
People people = new People();
Map<String, Object> map = new LinkedHashMap<>();
map.put("aa",123);
map.put("ww",123);
map.put("bb",233);
map.put("cc",233);
map.put("dd",233);
map.put("ee",233);
map.put("ff",233);
map.put("rr",233);
map.put("566",233);
map.put("88",233);
map.put("99",233);
map.put("55",233);
map.put("00",233);
people.setId(1002);
people.setName("222");
people.setMap(map);
System.out.println(JSON.toJSONString(people));
}
}
运行结果
{
"id":1002,
"name":"222",
"map":{
"aa":123,
"ww":123,
"bb":233,
"cc":233,
"dd":233,
"ee":233,
"ff":233,
"rr":233,
"566":233,
"88":233,
"99":233,
"55":233,
"00":233
}
}
使用Gson直接可以顺序读取和顺序输出,不过没有fastjosn快。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-11-06 集合怎么转换成数组?(数组怎么转换成集合)