Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java枚举进行Json反序列化_Java_Json_Spring Boot_Enums_Deserialization - Fatal编程技术网

使用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。您可以通过多种方式实现此响应。为了简单起见,我假设它是simple
Map

然而,我们首先需要使这个字符串格式良好

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来解决

  • 使用JSONObject将json字符串转换为java类对象
  • 循环JSONObject中的项以获取距离和单位数据
  • 创建HashMap对象并将其放入ArrayList中
  • 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()));
    });