最近在项目开发过程中遇到这样一个需求:
需要给前端提供一个接口,该接口返回数据类型为JSONObject对象,且其中的每个键值对都必须固定。
这是第一次遇到这种位置固定的情况,我们都知道,JSONObject本质是用HashMap实现的,而HashMap是散列的,是链式存储结构。
HashMap的存储过程,根据该元素自身提供的hashcode计算出散列值(在这一点上,就可以知道,元素放进去的位置是无法确定的,只有在获取hashcode后才知道),该值就是数组的下标,然后将该元素放入数组位置的链表中。
为了实现这一功能,在网上找到了两种解决办法。
1、使用构造函数com.alibaba.fastjson.JSONObject.JSONObject(boolean ordered),其中,参数代表是否排序;根据我的需求,我传了一个参数true。
JSONObject json = new JSONObject(true);
2、使用构造函数com.alibaba.fastjson.JSONObject.JSONObject(Map<String, Object> map),其中参数指定一个双向链表合二为一的LinkedHashMap,虽然LinkedHashMap存储数据时增加了时间和空间上的开销,但是考虑到我的需求数据量不大,因此也可以考虑该方法。
JSONObject json = new JSONObject(new LinkedHashMap<>());
本文介绍了一种在项目开发过程中实现固定JSON键值对顺序的方法。由于JSONObject内部使用HashMap存储数据,其顺序不可预知。文章提供了两种解决方案:一是通过构造函数设置有序参数;二是利用LinkedHashMap保持插入顺序。
1619

被折叠的 条评论
为什么被折叠?



