使用java枚举进行Json反序列化
我正在尝试将以下使用java枚举进行Json反序列化,java,json,spring-boot,enums,deserialization,Java,Json,Spring Boot,Enums,Deserialization,我正在尝试将以下JSON反序列化为java对象 "distance":[ { "weight": 60, "unit": "km" }, { "weight": 100, "unit": "m" } ] java对象应该如下所示: [ { "km": 60 }, { "m": 100 } ] 在这里,我发现了两个问题,第一,它不是格式良好的JSON。应该是: { "distance":[ {
JSON
反序列化为java对象
"distance":[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]
java对象应该如下所示:
[
{
"km": 60
},
{
"m": 100
}
]
在这里,我发现了两个问题,第一,它不是格式良好的JSON。应该是:
{
"distance":[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]
}
或
另一个是,你没有清楚地提到你的POJO。您可以通过多种方式实现此响应。为了简单起见,我假设它是simpleMap
然而,我们首先需要使这个字符串格式良好
String jsonStr = "\"distance\":[\n" +
" {\n" +
" \"weight\": 60,\n" +
" \"unit\": \"km\"\n" +
" },\n" +
" {\n" +
" \"weight\": 100,\n" +
" \"unit\": \"m\"\n" +
" }\n" +
"]";
jsonStr = jsonStr.substring(jsonStr.indexOf(":") + 1);
创建一个类:
@Data
public class Distance {
private Double weight;
private String unit;
}
在这里,我用龙目山作为接球手和接球手
将JSON字符串解析到距离的列表中:
ObjectMapper objectMapper = new ObjectMapper();
List<Distance> distances = objectMapper.readValue(jsonStr, new TypeReference<List<Distance>>(){});
或者,您也可以将其转换为列表
:
List<Pair<String, Double>> response = new ArrayList<>();
distances.forEach(distance -> {
response.add(new Pair(distance.getUnit(), distance.getWeight()));
});
List response=new ArrayList();
距离。forEach(距离->{
add(新的一对(distance.getUnit(),distance.getWeight());
});
快乐编码…这个问题可以通过使用JSONObject和HashMap来解决
import org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.HashMap;
公共班机{
公共静态void main(字符串args[])抛出JSONException{
ArrayList结果=新建ArrayList();
字符串jsonStr=“{\n”+
“\“距离\”:[\n”+
“{\n”+
“重量”:60\n+
“\”单位\“:\”公里\“\n”+
},\n+
“{\n”+
“重量”:100\n+
“\”单位\“:\”米\“\n”+
“}\n”+
“]\n”+
"}";
JSONObject json=新的JSONObject(jsonStr);
JSONArray distanceArray=json.getJSONArray(“距离”);
对于(int i=0;i
您能告诉我们您试过什么吗?
Map<String, Double> response = distances.stream().collect(Collectors.toMap(Distance::getUnit, Distance::getWeight));
List<Pair<String, Double>> response = new ArrayList<>();
distances.forEach(distance -> {
response.add(new Pair(distance.getUnit(), distance.getWeight()));
});