java - 将 JSON 字符串转换为具有自定义类型的 Map

标签 java json jackson

我的 JSON 字符串是这样的:

{
    "100": {
        "mode": 100,
        "enabled": true,
        "value": "someString"
    },
    "101": {
        "mode": 101,
        "enabled": false,
        "value": "someString"
    }
}

我其实有课

class Mode {

    @JsonProperty("mode")
    long mode;

    @JsonProperty("enabled")
    boolean enabled;

    @JsonProperty("value")
    String value;

}

我试过了

objectMapper.readValue(jsonString, Map.class); 

但是它的通用 map 和数字都转换为 Integer类型不是Long 。使用Mode代替Map上面抛出异常。

  1. 如何获取Long通用Map
  2. 而且,我怎样才能获得 Map<String, Mode>从 json 字符串中取出?

我的项目 maven 中有 jackson 库。

最佳答案

您的 key 是 String 。它会为你工作。

TypeReference<HashMap<String, Mode>> typeRef = new TypeReference<HashMap<String, Mode>>() {};
Map<String,Mode> map = objectMapper.readValue(jsonString,typeRef);

更新:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class Mode {

  @JsonProperty("mode")
  long mode;

  @JsonProperty("enabled")
  boolean enabled;

  @JsonProperty("value")
  String value;

  @Override
  public String toString() {
    return "Mode{" +
        "mode=" + mode +
        ", enabled=" + enabled +
        ", value='" + value + '\'' +
        '}';
  }

  public static void main(String[] args) throws IOException {
    String json = "{\n"
        + "    \"100\": {\n"
        + "        \"mode\": 100,\n"
        + "        \"enabled\": true,\n"
        + "        \"value\": \"someString\"\n"
        + "    },\n"
        + "    \"101\": {\n"
        + "        \"mode\": 101,\n"
        + "        \"enabled\": false,\n"
        + "        \"value\": \"someString\"\n"
        + "    }\n"
        + "}";

    ObjectMapper objectMapper = new ObjectMapper();
    TypeReference<HashMap<String, Mode>> typeRef = new TypeReference<HashMap<String, Mode>>() {
    };
    Map<String, Mode> map = objectMapper.readValue(json, typeRef);
    map.entrySet().forEach(entry-> System.out.println(entry.getKey() + " : " +entry.getValue() ));
  }
}

输出:

100 : Mode{mode=100, enabled=true, value='someString'}
101 : Mode{mode=101, enabled=false, value='someString'}

关于java - 将 JSON 字符串转换为具有自定义类型的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55629017/

相关文章:

java - IntelliJ IDEa 2018.2 使用 JDK 11 将 var lambda 参数突出显示为错误

java - 更改 boolean 值?

php - 将 php 中 json_encode 的结果传递给 javascript,然后将其传递给另一个 javascript 函数

java - Spring Boot JSON 空值序列化

java - 比较字符串与枚举

java - 在 API 中使用 java.util.Date 的充分理由

java - 将远程数据库中的 JSON 解析到 Android ListView

java - 如何将输入流文件分配给json?

java - 与 Jackson 映射时将默认值设置为空字段

Java : Json with duplicate keys to map using Jackson