通过带有Jackson的TypeReference将哪种字符串格式反序列化为Map <String,String>?

时间:2019-06-21 18:29:13

标签: java jackson deserialization

我正在尝试测试使用杰克逊将一串键/值属性反序列化为Map<String, String>的代码。我需要找到输入字符串的格式。我以为这是以下格式之一,但是两者都从objectMapper.readValue()返回null。

String testDeserStr = "{\n" +
                "  \"password\" : \"pwValue\",\n" +
                "  \"meterNumber\" : \"meterNumber1233445\",\n" +
                "  \"accountNumber\" : \"accountNumber6789\",\n" +
                "  \"key\" : \"keyValue\"\n" +
                "}";

String testDeserStr = "{password=pwValue, meterNumber=meterNumber1233445, accountNumber=accountNumber6789, key=keyValue}";

使用这些字符串,它试图通过以下方式读取它们:

final TypeReference<HashMap<String, String>> typeRef = new TypeReference<HashMap<String, String>>() { };

Map<String, String> result = objectMapper.readValue(testDeserStr, typeRef);

我以前使用过jackson进行序列化和反序列化,但是以前没有使用过TypeReference。我究竟做错了什么?输入字符串的格式是什么?

1 个答案:

答案 0 :(得分:1)

  • 您的第一个示例是正确的JSON。
  • 您的第二个示例不正确的JSON。
  • 您的解析逻辑是正确的

我刚刚测试过:

public class JsonTest {
    public static void main(String[] args) throws IOException {
        String testDeserStr = "{\n" +
            "  \"password\" : \"pwValue\",\n" +
            "  \"meterNumber\" : \"meterNumber1233445\",\n" +
            "  \"accountNumber\" : \"accountNumber6789\",\n" +
            "  \"key\" : \"keyValue\"\n" +
            "}";

        ObjectMapper objectMapper = new ObjectMapper();

        TypeReference<HashMap<String, String>> typeRef = new TypeReference<HashMap<String, String>>() {};
        Map<String, String> result = objectMapper.readValue(testDeserStr, typeRef);

        System.out.println(result);
    }
}

并收到输出:

{password=pwValue, meterNumber=meterNumber1233445, accountNumber=accountNumber6789, key=keyValue}

这是基于您原始输入的toString()的{​​{1}}方法的有效结果。