记录一下转换过程和遇到的问题,及解决办法。要转换成JSONObject或者map,是因为不想再新建个类,这个是临时方案。如果你要转成的是对象,就把中间的map那一步给改成你需要的类型就可以。
一、原始数据
枚举类
public enum TypeEnum {
QUESTION(1, "问题"),
ANSWER(2, "回答"),
COMMENT(3, "评论"),
NICK(4, "昵称");
private final int value;
private final String name;
TypeEnum(int value, String name) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
}
二、目标数据
[
{
"id":1,
"name":"问题"
},
{
"id":2,
"name":"回答"
},
{
"id":3,
"name":"评论"
},
{
"id":4,
"name":"昵称"
}
]
三、实际转换代码
List<JSONObject> list = Stream.of(TypeEnum.values())
.sorted(Comparator.comparing(TypeEnum::getType))
.map(item -> new JSONObject(new LinkedHashMap())
.fluentPut("id", item.getType())
.fluentPut("name", item.getName()))
.collect(Collectors.toList());
[{
"id":1,"name":"问题"},{
"id":4,"name":"昵称"},{
"id":3,"name":"评论"},{
"id":2,"name":"回答"}]
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", 1);
jsonObject.put("name", "张三");
其实没有按照你put的顺序去放的,结果见下文。
{
"name":"张三",
"id":1
}
为了解决该问题,所以我指定了底层数据结构要用LinkedHashMap存储该json数据