【问题标题】:How to extract value of a latest timestamp from a json using Gson?如何使用 Gson 从 json 中提取最新时间戳的值?
【发布时间】:2014-03-29 01:49:45
【问题描述】:

我有一个这样的 JSON 字符串 -

{"error_1395991841806": "ErrorA", "error_1395991131941": "ErrorB", "error_1395991534713": "ErrorC", "error_1395991772241": "ErrorD"}

在上面的 JSON 字符串中,我拥有error_timestampInMilliseconds 这种格式的所有键。

现在我想按timestamp 的降序对所有键进行排序,然后提取最新的error_timestamp key 的值。这意味着无论timestamp 与当前timestamp 相比是最新的,我将使用该键来提取它的值。这可能吗?

我将 Gson 用于 JSON。下面是我的代码-

String data = new String(event.getData().getData(), Charset.forName("UTF-8"));

// here this data is my json string
System.out.println(data);

JsonObject jsonObject = gson.fromJson(data, JsonObject.class); // parse

所以假设这是最新的时间戳error_1395991841806 与当前时间戳相比,我将打印出ErrorA 作为它的值。

【问题讨论】:

    标签: java json parsing sorting gson


    【解决方案1】:

    您的 JSON 代表一个Map<String, String>,并且您希望获得最高的Key,因此您可以尝试将您的 JSON 反序列化为一个TreeMap,这正是一个按Key 排序的Map...

    Type yourMapType = new TypeToken<TreeMap<String, String>>() {}.getType();
    TreeMap<String, String> yourMap = gson.fromJson(yourJsonString, yourMapType);
    
    String highestKey = yourMap.lastKey();
    String lastError = yourMap.get(highestKey);
    

    现在lastError 应该包含"ErrorA"

    请注意,我没有尝试过,但我想它应该可以工作......


    编辑:如果由于某种原因您不能直接反序列化为 TreeMap(尽管我猜您应该能够做到),请尝试反序列化为泛型Map,然后从中构造一个TreeMap,如下所示:

    Type yourMapType = new TypeToken<Map<String, String>>() {}.getType();
    Map<String, String> yourGenericMap = gson.fromJson(yourJsonString, yourMapType);
    TreeMap<String, String> yourMap = new TreeMap<>(yourGenericMap);
    // ...
    

    【讨论】:

    • 感谢您的建议。我正要尝试您的第一个建议,但感到困惑的是第一行以Type 开头是否正确?如果是,那么我应该为那些导入什么?这是第一次,我看到TypeTypeToken 所以很困惑
    • @SSH,Typejava.lang.reflect包中的Java内置接口。 TypeTokencom.google.gson.reflect 包中的 Gson 类...
    • 是的,它工作得很好,但很快就会问它如何对由string_timestamp 组成的键进行排序。有什么想法吗?
    • @SSH 它按其自然顺序对它们的键进行排序,也就是说,在这种情况下按字母顺序排列。请注意,time_1..1低于time_2..2。对了,你用的是第一个代码还是EDIT里面的代码?
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多