【问题标题】:Parse composite json key解析复合 json 键
【发布时间】:2019-10-07 14:42:45
【问题描述】:

我有一个像 {"xxx.Name-xxx-1111111":"100"} 这样的 json 其中 1111111 是时间戳,100 是值

我需要将时间戳和值放入 jpa 并通过 spring 插入数据库。

我怎样才能解析这个字符串并把它放到 jpa 中?

【问题讨论】:

    标签: java json spring jpa


    【解决方案1】:

    有一些流行的库可以将 JSON 映射到具有您选择的类型的对象。

    谷歌的GSON不错,使用也很简单:https://mvnrepository.com/artifact/com.google.code.gson/gson

    JSON 到对象

    Gson gson = new Gson();
    MyObject myObject = gson.fromJson(jsonString, MyObject.class)
    

    这应该将 json 转换为您想要的格式,以便您可以保留它。

    【讨论】:

    • 谢谢,但更实际的如何通过掩码在旅途中拆分键,然后映射到对象
    【解决方案2】:

    您可以使用流行的 JSON 库(例如 JacksonGson)解析给定的 JSON 字符串,如下所示。

    首先,1111111 不是有效的Timestamp 格式,应该是这样的 {"xxx.Name-xxx-2019-10-08 09:00:00强>":"100"}。

    其次,使用Jackson API 解析 JSON 字符串,获取 key 和 value 字段。

    第三,我假设时间戳值的前缀是xxx.Name-xxx-,那么你可以检索它(说2019-10-08 09:00:00 >) 使用String.replace()

    示例代码:

    String jsonStr = "{\"xxx.Name-xxx-2019-10-08 09:00:00\":\"100\"}";
    
    ObjectMapper mapper = new ObjectMapper();
    for (Iterator<Map.Entry<String, JsonNode>> it = mapper.readTree(jsonStr).fields(); it.hasNext();) {
        Map.Entry<String, JsonNode> field = it.next();
        String key = field.getKey();
        int value = field.getValue().asInt();
        System.out.println("key:       " + key);
        System.out.println("value:     " + value);
    
        Timestamp timestamp = Timestamp.valueOf(key.replace("xxx.Name-xxx-", ""));
        System.out.println("timestamp: " + timestamp);
    }
    

    控制台输出:

    key:       xxx.Name-xxx-2019-10-08 09:00:00
    value:     100
    timestamp: 2019-10-08 09:00:00.0
    

    最后,我认为你可以直接使用这两个变量:timestampvalue 用于 JPA。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2015-06-02
      • 2021-10-04
      • 2020-07-19
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多