广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >JAVA - fastjson 中 JSONObject 的顺序问题
  • 303
分享到

JAVA - fastjson 中 JSONObject 的顺序问题

java开发语言数据结构 2023-09-11 07:09:35 303人浏览 八月长安
摘要

目录 1. JSONObject  存在的默认排序问题一 1.1. 解决方案一 1.2. 解决方案二 2. JSONObject  存在的默认排序问题二 2.1. 解决方案一 2.2. 解决方案二 在使用 fastJSON 中的 jsON

目录

1. JSONObject  存在的默认排序问题一

1.1. 解决方案一

1.2. 解决方案二

2. JSONObject  存在的默认排序问题二

2.1. 解决方案一

2.2. 解决方案二


在使用 fastJSON 中的 jsONObject 有时候会遇到数据顺序发生了变化,而实际需求中需要保持原有的顺序。

1. JSONObject  存在的默认排序问题一

JSONObject 初始化时候顺序直接变了

package com;import com.alibaba.fastjson.JSONObject;import java.util.LinkedHashMap;import java.util.Map;public class TestFastjson {    public static void main(String[] args) {        Map map = new LinkedHashMap<>();        map.put("c", 1);        map.put("a", 2);        map.put("b", 3);        System.out.println("LinkedHashMap: " + map);        JSONObject jsonObject = new JSONObject();        jsonObject.putAll(map);        System.out.println("JSONObject: " + jsonObject);    }}

代码执行结果为:

LinkedHashMap: {c=1, a=2, b=3}JSONObject: {"a":2,"b":3,"c":1}

可以看出 JSONObject 的顺序并没有保持原来的 LinkedHashMap 的顺序。原因可看源码发现:

JSONObject 初始化的时候调用的是 HashMap,导致不能保持原有的顺序,新的排序结果由 key 决定。

如果需要保持原有的顺序,从此源码中可看出两种解决方案。

1.1. 解决方案一

可以使用 ordered 参数来使用 LinkedHashMap 来初始化 JSONObject。

package com;import com.alibaba.fastjson.JSONObject;import java.util.LinkedHashMap;import java.util.Map;public class TestFastjson {    public static void main(String[] args) {        Map map = new LinkedHashMap<>();        map.put("c", 1);        map.put("a", 2);        map.put("b", 3);        System.out.println("LinkedHashMap: " + map);        JSONObject jsonObject = new JSONObject(true);        jsonObject.putAll(map);        System.out.println("JSONObject: " + jsonObject);    }}

执行结果

LinkedHashMap: {c=1, a=2, b=3}JSONObject: {"c":1,"a":2,"b":3}

1.2. 解决方案二

直接使用  LinkedHashMap 来初始化 JSONObject。

package com;import com.alibaba.fastjson.JSONObject;import java.util.LinkedHashMap;import java.util.Map;public class TestFastjson {    public static void main(String[] args) {        Map map = new LinkedHashMap<>();        map.put("c", 1);        map.put("a", 2);        map.put("b", 3);        System.out.println("LinkedHashMap: " + map);        JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());        jsonObject.putAll(map);        System.out.println("JSONObject: " + jsonObject);    }}

执行结果

LinkedHashMap: {c=1, a=2, b=3}JSONObject: {"c":1,"a":2,"b":3}

2. JSONObject  存在的默认排序问题二

在使用 JSONObject.parseObject 的时候 JSONObject 顺序变了

package com;import com.alibaba.fastjson.JSONObject;import java.util.LinkedHashMap;import java.util.Map;public class TestFastjson {    public static void main(String[] args) {        Map map = new LinkedHashMap<>();        map.put("c", 1);        map.put("a", 2);        map.put("b", 3);        System.out.println("LinkedHashMap: " + map);        JSONObject jsonObject = new JSONObject(true);        jsonObject.putAll(map);        System.out.println("JSONObject: " + jsonObject);        JSONObject jsonObject1 = JSONObject.parseObject(JSONObject.toJSONString(jsonObject));        System.out.println("JSONObject1: " + jsonObject1);    }}

执行结果

LinkedHashMap: {c=1, a=2, b=3}JSONObject: {"c":1,"a":2,"b":3}JSONObject1: {"a":2,"b":3,"c":1}

JSONObject 转成 String 再转回 JSONObject 出现了问题一中的情况,原因可知也是相同的。

2.1. 解决方案一

从源码中可以看到,通过 Feature 可以指定 ParseObject 时候的特征,因此

package com;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.parser.Feature;import java.util.LinkedHashMap;import java.util.Map;public class TestFastjson {    public static void main(String[] args) {        Map map = new LinkedHashMap<>();        map.put("c", 1);        map.put("a", 2);        map.put("b", 3);        System.out.println("LinkedHashMap: " + map);        JSONObject jsonObject = new JSONObject(true);        jsonObject.putAll(map);        System.out.println("JSONObject: " + jsonObject);        JSONObject jsonObject1 = JSONObject.parseObject(JSONObject.toJSONString(jsonObject), Feature.OrderedField);        System.out.println("JSONObject1: " + jsonObject1);    }}

执行结果

LinkedHashMap: {c=1, a=2, b=3}JSONObject: {"c":1,"a":2,"b":3}JSONObject1: {"c":1,"a":2,"b":3}

2.2. 解决方案二

直接使用 JSONArray,略

来源地址:https://blog.csdn.net/u014147522/article/details/128496779

--结束END--

本文标题: JAVA - fastjson 中 JSONObject 的顺序问题

本文链接: https://www.lsjlt.com/news/402858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA - fastjson 中 JSONObject 的顺序问题
    目录 1. JSONObject  存在的默认排序问题一 1.1. 解决方案一 1.2. 解决方案二 2. JSONObject  存在的默认排序问题二 2.1. 解决方案一 2.2. 解决方案二 在使用 fastjson 中的 JSON...
    99+
    2023-09-11
    java 开发语言 数据结构
  • MYSQL INNODB中表数据的返回顺序问题
    接上一篇: http://blog.itpub.net/7728585/viewspace-2126344/ 如何证明INNODB辅助索引叶子结点KEY值相同的按照PRIMARY KEY排序  ...
    99+
    2022-10-18
  • 如何解决Docker-compose中depends_on顺序的问题
    小编给大家分享一下如何解决Docker-compose中depends_on顺序的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文:需求是要将一个 打包好的...
    99+
    2023-06-25
  • MySQL读取my.cnf的顺序问题详情
    目录MySQL读取my.cnf的顺序一、mysql.server启动方式二、mysqld_safe启动方式三、关于mysqld和my_print_defaults读取my.cnf顺序...
    99+
    2022-11-12
  • 有关mysql中sql的执行顺序的小问题
    今天工作中碰到一个sql问题,关于left join的,后面虽然解决了,但是通过此问题了解了一下sql的执行顺序 场景还原 为避免安全纠纷,把场景模拟。 有一个学生表-S,一个成绩表G CREATE T...
    99+
    2022-10-18
  • 浅谈Docker-compose中的depends_on顺序的问题解决
    使用depends_on进行容器排序时并不能完美的解决容器之间的依赖问题,原因是因为 depends_on只能保证容器进入到 运行状态而不是完全状态(不知道怎么描述了)。 网上已经列...
    99+
    2022-11-12
  • 浅谈@Value和@Bean的执行顺序问题
    问题描述 使用@Autowired处理多个同种类型的bean,出现@Value和@Bean的执行顺序问题。 首先使用扫描包+注解的方式注册User类型的不同bean,分别是user、...
    99+
    2022-11-12
  • 详解JS对象遍历的顺序问题
    可能有些同学听过在 JavaScript 中遍历对象顺序不固定的这一说法。事实上,这个说法不是特别准确。 对待遍历顺序,对象有一套自己既定的规则,在此规则下呢,对象的遍历顺序会受插...
    99+
    2022-11-12
  • java fastjson传输long数据却接收到了int的问题
    目录fastjson传输long数据却接收到了int使用FastJson做数据类型转换数据转化为JSON将json数据解析fastjson传输long数据却接收到了int 最近在ja...
    99+
    2022-11-12
  • 解决json字符串序列化后的顺序问题
    1、应用场景: 如果项目中用到json字符串转为jsonObject的需求,并且,需要保证字符串的顺序转之前和转成jsonObject之后输出的结果完全一致。可能有点绕口,下面举一个...
    99+
    2022-11-11
  • java中对Map中的key顺序排序
    使用List的默认方法 sort 或者 Collections.sort 进行排序这种方法需要对map的key进行转换 Map map=new HashMap();map.put("4","maliu...
    99+
    2023-09-22
    java
  • 解决com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure问题的操作顺序
    报错信息 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfu...
    99+
    2023-09-01
    java mysql
  • 遇到php中extension加载顺序问题怎么办
    这篇文章将为大家详细讲解有关遇到php中extension加载顺序问题怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php extension 加载顺序问题有的php扩展,加载是有先后顺序的,如果搞...
    99+
    2023-06-09
  • web开发中JavaScript代码执行的先后顺序问题
    这篇文章主要介绍了web开发中JavaScript代码执行的先后顺序问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、js--->...
    99+
    2022-10-19
  • CSS的执行顺序和优先级问题介绍
    本篇内容介绍了“CSS的执行顺序和优先级问题介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、确定CS...
    99+
    2022-10-19
  • 解决mybatis中resultType取出数据顺序不一致的问题
    目录mybatis resultType取出数据顺序不一致解决方法mybatis中resultType问题mybatis resultType取出数据顺序不一致 之前做一个页面的动态...
    99+
    2022-11-13
  • java fastjson传输long数据接收到了int的问题怎么解决
    这篇“java fastjson传输long数据接收到了int的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2023-06-26
  • canvas如何绘制多张图的排列顺序问题
    小编给大家分享一下canvas如何绘制多张图的排列顺序问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在开发中,如果遇到需要使用canvas同时绘制多张图片,但...
    99+
    2023-06-09
  • CSS中简写属性要注意TRouBLe的顺序问题有哪些
    这篇文章将为大家详细讲解有关CSS中简写属性要注意TRouBLe的顺序问题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简写属性是用于同时给多个属性赋值的属性。比如font是一个简写属性,可以用于设...
    99+
    2023-06-08
  • Java对象转Json,关于@JSONField对象字段重命名和顺序问题
    目录Java对象转Json,@JSONField对象字段重命名和顺序一、引入maven依赖二、字段重命名三、字段排序@JSONField注解常用的使用场景一、JSON内容与实体类,@...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作