Map<String, Object> map1 = mapper.readValue(json, new TypeReference<Map<String, Object>>() {});
基本的には、String 型のキーと Object 型の値を持つ Map を返します。したがって、Jackson は type のキーと typeString
の値を提供しObject
ました。ジャクソンはあなたのカスタムオブジェクトについて知りません。Object
それが、 a Map
、具体的にはa である独自のネイティブバウンドをあなたに与えLinkedHashMap
た理由です。LinkedHashMap
get
Map
したがって、次のように変更します。
Map<String, IronRunId> map1 = mapper.readValue(json, new TypeReference<Map<String, IronRunId>>() {});
また、具象型よりもインターフェイス型の Object を宣言することをお勧めします。だから代わりに
HashMap<String, Object> map = new HashMap<String, Object>();
成功する
Map<String, Object> map = new HashMap<String, Object>();
編集
追加した質問への回答として、すべてのオブジェクトを処理するラッパー オブジェクトを作成できます。このようなもの。
class Wrapper{
private IronRunId ironRunId;
private long time;
private Map<String, String> aspects;
private String anotherString;
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public Map<String, String> getAspects() {
return aspects;
}
public void setAspects(Map<String, String> aspects) {
this.aspects = aspects;
}
public String getAnotherString() {
return anotherString;
}
public void setAnotherString(String anotherString) {
this.anotherString = anotherString;
}
public IronRunId getIronRunId() {
return ironRunId;
}
public void setIronRunId(IronRunId ironRunId) {
this.ironRunId = ironRunId;
}
}
その後、このクラスにさまざまなオブジェクトを格納できます。
改訂版
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException{
IronRunId Id = new IronRunId("RunObject", "Runid1", 4);
Map<String, String> aspects = new HashMap<String, String>();
aspects.put("aspectskey1", "aspectsValue1");
aspects.put("aspectskey2", "aspectsValue2");
aspects.put("aspectskey3", "aspectsValue3");
String anotherString = "anotherString";
long time = 1L;
Wrapper objectWrapper = new Wrapper();
ObjectMapper objectMapper = new ObjectMapper();
objectWrapper.setIronRunId(Id);
objectWrapper.setTime(time);
objectWrapper.setAnotherString(anotherString);
objectWrapper.setAspects(aspects);
Map<String, Wrapper> map = new HashMap<String, Wrapper>();
map.put("theWrapper", objectWrapper);
String json = objectMapper.writeValueAsString(map);
Map<String, Wrapper> map1 = objectMapper.readValue(json, new TypeReference<Map<String, Wrapper>>() {});
Wrapper wrapper = map1.get("theWrapper");
System.out.println("run id : " + wrapper.getIronRunId().toString());
System.out.println("time : " + wrapper.getTime());
System.out.println("aspects : " + wrapper.getAspects().toString());
System.out.println("anotherString : " + wrapper.getAnotherString());
}