最近需要对springboot工程下的resource目下的静态json文件做读取操作,但是在操作工程中,发现读取后直接转为json时,json的顺序发生了变化,这对我们接下来的业务处理有所影响,为了解决这个问题,度娘了一下,这块搜到的答案挺杂的,有的就是牛头不对马尾,固做下笔记,记录一下,可能描述的并不是太好,下面代码说明,新建temp.json,在resource目录下:
{
"id":"1",
"name":"霜之哀伤",
"age":18
}
通过读取json文件的方法获取一下这个map的key,输出如下:
[name, id, age]
看到了,给我们预期的不符呀,修改后结果如下:
[id, name, age]
可以看到,修改后的这个顺序才是我们想要的。
看一下我们使用的这个方法:
/**
* 读取json文件转为Map
* @param path
* @return
*/
public static Map<String, String> readJsonFromClassPath(String path) {
ClassPathResource resource = new ClassPathResource(path);
if (resource.exists()) {
try (InputStream in = resource.getInputStream();){
String readJson = IOUtils.toString(in, Charset.forName("UTF-8"));
return JSON.parseObject(readJson, HashMap.class, Feature.OrderedField);
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
没有任何其他依赖,IOUtils是commons工具包下的,并不是自己写的,依赖如下:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
我们要和json文件的顺序一样的,修改如下:
// 修改前
JSON.parseObject(readJson, HashMap.class, Feature.OrderedField);
// 修改后
JSON.parseObject(readJson, LinkedHashMap.class, Feature.OrderedField)
可以看到将HashMap换成LinkedHashMap就可以实现。