我有一个要在POJO中转换的Json对象,问题是他的属性之一是一个值c,它将具有我事先不知道的不同值。假设我对"$key"
一无所知,或者可能是全世界城市的名字
{
"data": [{
"id": 1,
"name": "theName",
"symbol": "theSymbol",
"last_updated": "2018-06-02T22:51:28.209Z",
"quote": {
"$key": {
"price": 9283.92,
},
"$key": {
"price": 1,
}
}
}],
"status": {
"timestamp": "2018-06-02T22:51:28.209Z",
"error_code": 0,
"error_message": "",
"elapsed": 10,
"credit_count": 1
}
}
答案 0 :(得分:1)
您可以将$key
映射到JsonNode
类型的属性。它将具有一个有效的equals / hashCode,因此您可以对其进行比较,将其放入HashMaps等中,而无需进一步对其进行数据绑定(JsonNode直接表示Json(子)树。)
答案 1 :(得分:1)
由于“ $ key”是未知的,我的建议是将quote
转换为Map<String, Map<String, Integer>>
,以便可以忽略“ $ key”的值!这是我的代码:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class XmlParser {
static class Entity {
@JsonProperty("id")
String id;
@JsonProperty("name")
String name;
@JsonProperty("symbol")
String symbol;
@JsonProperty("last_updated")
String lastUpdated;
@JsonProperty("quote")
Map<String, Map<String, Integer>> quote;
}
static class Data {
@JsonProperty("data")
List<Entity> data;
}
public static void main(String[] args) throws Exception {
final String testJson = "{\"data\":[{\"id\":1,\"name\":\"theName\",\"symbol\":\"theSymbol\",\"last_updated\":\"2018-06-02T22:51:28.209Z\",\"quote\":{\"a\":{\"price\":9283.92},\"b\":{\"price\":1}}}]}";
ObjectMapper mapper = new ObjectMapper();
Data data = mapper.readValue(testJson, Data.class);
System.out.println(mapper.writeValueAsString(data));
}
}
答案 2 :(得分:0)
我会以不同的方式解决这个问题。我将它做成某种“元对象”,例如。像这样:
{
....
"unknownType": {
"name": "$key",
"value1": "9283.92",
"value2": "tttt"
}
}
这样,您就消除了一层未知信息!您可以尝试将valueN字段解析为所有不同类型的值,并抛出/捕获解析异常,从而找出正确的类型。
HTH