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