maptojsonstring保持原始排序解决⽅案
背景
⼯作中需要将map中的映射转换为json字符串,并且需要保持映射在put时的顺序。
map数据:
tMap.put("code", "123");
tMap.put("name", "某某");
object totMap.put("sex", "男");
tMap.put("age", "12");
转换后的json字符串:
{
"code":"123",
"name":"某某",
"sex":"男",
"age":"12"
}
最开始采⽤的是fastjson库,但是由于使⽤的是⽼版本1.1.9,不⽀持保持原始排序,并且由于某些原因(其实是懒得去架构沟通)不能升级新版本,达不到要求,就放弃fastjson库了。
后来决定试试org.json库,最终⽤这个库实现了。
过程
fastjson
最开始采⽤的是fastjson类库,⾸先创建JSONObject,然后向JSONObject中存⼊需要的数据,然后调⽤JSONString()⽅法转换为json字符串,但是转换后的json字符串中,按照关键字进⾏了排序,没有保持存⼊是后的排序。转换后的json字符串如下:
{
"age":"12",
"code":"123",
"name":"某某",
"sex":"男"
}
调查后在官⽅⽂档中发现说在⾼版本中已经解决这个问题了,可以在创建JSONObject对象时传⼊true参数,创建有序的JSONObject对象:
JSONObject tMap = new JSONObject(true);
然后再转换为保持有序的json字符串。
org.json
前⽂说的fastjson不能升级版本,那么可不可以使⽤org.json类库来实现这个需求呢?答案⾃然是可以。
实现过程如下:
创建LinkedHashMap对象,保存数据到这个对象中。
LinkedHashMap<String, Object> tMap = new LinkedHashMap<String, Object>();
tMap.put("code", "123");
tMap.put("name", "某某");
tMap.put("sex", "男");
tMap.put("age", "12");
创建JSONObject对象,传⼊上⾯创建的LinkedHashMap对象做为参数。
JSONObject jo = new JSONObject(tMap);
调⽤toString()⽅法转换为json字符串。
最终转换为保持原始排序的json字符串。
总结
1. ⾼版本的fastjson类库,可以通过JSONObject tMap = new JSONObject(true);创建可以保持原始排序的JSONObject对象,再调
⽤toJSONString()⽅法转换为json字符串。
2. org.json类库,可以通过JSONObject jo = new JSONObject(LinkedHashMap对象);创建可以保持原始排序的JSONObject对象,再调
⽤toString()⽅法转换为json字符串。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论