动态Json到JavaPOJO

动态Json到JavaPOJO,java,json,jackson,Java,Json,Jackson,我想将以下json映射到Java中的pojo。在下面显示的代码段中,result是一个Json对象,其值是另一个Json对象,它是一个映射。我尝试将其转换为Pojo,但失败了。result映射中的键是动态的,我之前无法猜到它们 final_result : { "result": { "1597696140": 70

我想将以下json映射到Java中的pojo。在下面显示的代码段中,
result
是一个Json对象,其值是另一个Json对象,它是一个映射。我尝试将其转换为Pojo,但失败了。
result
映射中的键是动态的,我之前无法猜到它们

         final_result : 
         { 
              "result": 
                {
                    "1597696140": 70.32,
                    "1597696141": 89.12,
                    "1597696150": 95.32,
                }
         }

我创建的pojo是:


@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultData {
  Map<Long, Double> resultMap;

  public ResultData(Map<Long, Double> resultMap) {
    this.resultMap = resultMap;
  }

  public ResultData() {
  }

  @Override
  public String toString() {
    return super.toString();
  }
}

我可能在这里做错了什么?

将JSONObject转换为Map并将Map设置为pojo字段,解决了这个问题,并没有导致我编写自定义反序列化程序

Map<Long, Double> resultData = objectMapper.readValue(resultData.getJSONObject("result").toString(), Map.class);
FinalResultData finaResultData = new FinalResultData(resultData);
Map resultData=objectMapper.readValue(resultData.getJSONObject(“result”).toString(),Map.class);
FinalResultData FinalResultData=新的FinalResultData(resultData);

假设,您的
JSON
负载如下所示:

{
  "final_result": {
    "result": {
      "1597696140": 70.32,
      "1597696141": 89.12,
      "1597696150": 95.32
    }
  }
}
import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./src/main/resources/test.json");

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
        ResultData resultData = mapper.readValue(jsonFile, ResultData.class);
        System.out.println(resultData);
    }
}
您可以将其反序列化到类:

@JsonRootName("final_result")
class ResultData {
    private Map<Long, Double> result;

    public Map<Long, Double> getResult() {
        return result;
    }

    @Override
    public String toString() {
        return result.toString();
    }
}
以上代码打印:

{1597696140=70.32, 1597696141=89.12, 1597696150=95.32}

好吧,你告诉Jackson忽略诸如“1597696140”之类的未知属性。我也不确定Jackson是否能够将字符串解析为开箱即用的长字符串,因此您可能需要在此处添加一些自定义反序列化,或者尝试使用
映射
。谢谢!我确实映射到了
map
,并将结果映射对象设置为pojo。
{1597696140=70.32, 1597696141=89.12, 1597696150=95.32}