我需要解析帮助,我试图创建一个不同类型的模型类,但没有用,请在这里帮助我。 json看起来像这样:
[
[
1518909300000,
"0.08815700",
"0.08828700",
"0.08780000",
"0.08792900",
"1727.93100000",
1518910199999,
"152.11480375",
5118,
"897.71600000",
"79.04635703",
"0"
],
[
1518910200000,
"0.08788400",
"0.08824200",
"0.08766200",
"0.08810000",
"1789.81300000",
1518911099999,
"157.20177729",
6201,
"898.89500000",
"78.95697080",
"0"
]
]
我正在尝试使用数据类解析它:
@JsonIgnoreProperties(ignoreUnknown = true)
public class KlineResponse {
public List<Kline> getKlineList() {
return klineList;
}
public List<Kline> klineList;
public class Kline {
@JsonProperty("4")
Double close;
@JsonProperty("8")
Integer tradesNumber;
public Double getClose() {
return close;
}
public void setClose(Double close) {
this.close = close;
}
public Integer getTradesNumber() {
return tradesNumber;
}
public void setTradesNumber(Integer tradesNumber) {
this.tradesNumber = tradesNumber;
}
}
}
和这一行
mapper.readValue(response.getBody(), new TypeReference<List<KlineResponse>>(){})
或
mapper.readValue(response.getBody(), KlineResponse.class)
但每次出错: 无法从START_ARRAY标记中反序列化pt.settings.model.KlineResponse的实例, 请帮忙
答案 0 :(得分:2)
核心问题是您收到了您期望的数组数组和对象数组。将mapper.readValue(response.getBody(), KlineResponse.class)
更改为mapper.readValue(response.getBody(), Object[].class)
即可确认。
您有几个选择如何继续:
答案 1 :(得分:1)
您不需要任何java类。没有要反序列化的JSON对象,只有数组。
在第二种情况下,杰克逊期待{ "klineList": [] }
首先是[{ "klineList": [] }, { "klineList": [] }]
Kline对象只能解析为{"4": 0.0, "8": 0 }
(用相同类型的任何值替换零)...所以真的不清楚为什么你期望这个数据工作...注释是不是列表的索引。
另外,您的列表包含字符串和整数,因此您只能反序列化为TypeReference<List<List<Object>>>
,然后迭代它以解析整数,浮点数或字符串
我可能会建议你使用标准的json解析器,而不是objectmapper
答案 2 :(得分:1)
将JsonNode与JPointer一起使用。避免创建POJO并通过JsonNode直接处理数据。
ObjectMapper mapper = new ObjectMapper();
JsonNode matrix = mapper.readValue(in, JsonNode.class);
matrix.forEach(array -> {
System.out.println("Next Values:");
System.out.println(array.at("/4").asDouble());
System.out.println(array.at("/8").asInt());
});
打印
Next Values:
0.087929
5118.0
Next Values:
0.0881
6201.0