値の1つがISO-8601 datetime stringであるJSONがあります。 java.util.Dateに変換する必要があります。どうすればいいのですか?JSONを読み取り、Map <String、Object>に変換します
次のコードが正しいかどうかわかりません。
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.text.SimpleDateFormat;
import java.util.Map;
public class CustomObjectMapper extends ObjectMapper {
private static final long serialVersionUID = 2686298573056737140L;
private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public CustomObjectMapper() {
super.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
super.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
super.setSerializationInclusion(JsonInclude.Include.NON_NULL);
super.setDateFormat(df);
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new CustomObjectMapper();
Map<String, Object> map = mapper.readValue(JSON, new TypeReference<Map<String, Object>>(){});
System.out.println(map);
for(String key: map.keySet()) {
Object val = map.get(key);
System.out.println("keyName is " + key + " value is " + val + " value type is " + val.getClass());
}
}
private static final String JSON = "{\"mybool\":true,\"mydate\":\"2016-02-11T18:30:00.511-08:00\",\"mystring\":\"test\",\"myint\":1234}";
}
マップの内容を印刷すると、「mydate」の値が文字列として表示されていることがわかります。
key is mybool value is true value type is class java.lang.Boolean
key is mydate value is 2016-02-11T18:30:00.511-08:00 value type is class java.lang.String
key is mystring value is test value type is class java.lang.String
key is myint value is 1234 value type is class java.lang.Integer
キー「mydate」の値の型がjava.util.DateのどこにあるかをJacksonで設定できますか?
私はあなたがマップに読んでいる場合、どの値が日付かを指定する方法がないと思う。 – chomnoue