序列化为日期时间,对象

时间:2019-06-28 11:06:48

标签: java json datetime jackson

我有这种格式的地图,

let data = JSON.parse(localStorage.getItem("the-data")) || {/*...default structure here...*/};
// ...modify the various parts of `data`...
localStorage.setItem("the-data", JSON.stringify(data));

我的目的是做HashMap<String, Object> map = {"RequestsServed":{"2019-06-28T00:00:00Z":0.0},"PullRequests":{"2019-06-28T00:00:00Z":0.0}} 并获得一张  map.get("RequestsServed"),与其中的键,值对无关。

我尝试使用,

{"2019-06-28T00:00:00Z":0.0}

,失败了。请帮忙。谢谢

2 个答案:

答案 0 :(得分:1)

我真是愚蠢地问了这个问题...

map.get(“ RequestsServed”)会给我一个LinkedTreeMap。我只需要将其解析为我选择的HashMap。

将map.get(“ RequestsServed”)序列化为json并将结果值解析为HashMap将轻松为我提供所需的结果。

谢谢大家的时间。

答案 1 :(得分:0)

我已经编写了一个用于测试目的的虚拟类:

public class TempObject {
    private String date;
    private Double value;

    public TempObject(String date, Double value) {
        this.date = date;
        this.value = value;
    }

    public String getDate() {
        return date;
    }

    public Double getValue() {
        return value;
    }
}

这是您的解决方案:

// Initializing the Map (I'm using LinkedHashMap here for a reason)
Map<String, Object> map = new LinkedHashMap<>();
map.put("RequestsServed", new TempObject("2019-06-28T00:00:00Z", 0.0));
map.put("PullRequests", new TempObject("2019-06-28T00:00:00Z", 0.1));

// Using Collectors.toMap() with mergeFunction (to handle duplicate keys)
Map<String, Object> result = map.values().stream().map(object -> (TempObject) object).collect(Collectors.toMap(TempObject::getDate, TempObject::getValue, (existingValue, newValue) -> newValue));

System.out.println(result); // printing the value of result map: {2019-06-28T00:00:00Z=0.1}

您还可以将此字符串值解析为LocalDateTime