[英]Converting JSON string to Map with custom types
我的JSON字符串是這樣的:
{
"100": {
"mode": 100,
"enabled": true,
"value": "someString"
},
"101": {
"mode": 101,
"enabled": false,
"value": "someString"
}
}
我實際上有課
class Mode {
@JsonProperty("mode")
long mode;
@JsonProperty("enabled")
boolean enabled;
@JsonProperty("value")
String value;
}
我試過了
objectMapper.readValue(jsonString, Map.class);
但是其通用映射以及數字都轉換為Integer
類型,而不是Long
。 使用Mode
代替上面的Map
會引發異常。
Map
獲得Long
? Map<String, Mode>
? 我的項目專家中有傑克遜圖書館。
您的密鑰是String
。 它將為您工作。
TypeReference<HashMap<String, Mode>> typeRef = new TypeReference<HashMap<String, Mode>>() {};
Map<String,Mode> map = objectMapper.readValue(jsonString,typeRef);
更新 :
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Mode {
@JsonProperty("mode")
long mode;
@JsonProperty("enabled")
boolean enabled;
@JsonProperty("value")
String value;
@Override
public String toString() {
return "Mode{" +
"mode=" + mode +
", enabled=" + enabled +
", value='" + value + '\'' +
'}';
}
public static void main(String[] args) throws IOException {
String json = "{\n"
+ " \"100\": {\n"
+ " \"mode\": 100,\n"
+ " \"enabled\": true,\n"
+ " \"value\": \"someString\"\n"
+ " },\n"
+ " \"101\": {\n"
+ " \"mode\": 101,\n"
+ " \"enabled\": false,\n"
+ " \"value\": \"someString\"\n"
+ " }\n"
+ "}";
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<HashMap<String, Mode>> typeRef = new TypeReference<HashMap<String, Mode>>() {
};
Map<String, Mode> map = objectMapper.readValue(json, typeRef);
map.entrySet().forEach(entry-> System.out.println(entry.getKey() + " : " +entry.getValue() ));
}
}
輸出:
100 : Mode{mode=100, enabled=true, value='someString'}
101 : Mode{mode=101, enabled=false, value='someString'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.