使用自定义类型将JSON字符串转换为Map

时间:2019-04-11 09:23:05

标签: 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); 

但其通用映射以及数字将转换为Integer类型而不是Long类型。使用Mode代替上面的Map会引发异常。

  1. 如何获取通用Long中的Map
  2. 而且,如何从json字符串中获取Map<String, Mode>

我的项目专家中有杰克逊图书馆。

1 个答案:

答案 0 :(得分:2)

您的密钥是Set shprng = sht.Shapes.Range(shape_index) 。它将为您工作。

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() ));
  }
}