我遇到了一个我不明白的问题。
我创建了一个小例子。
package com.demo;
import java.util.Map;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
public class DemoTest {
@Test
public void test1() throws Exception {
String json = "{" + "\"a\": \"a1\"," + "\"b\": {" + "\"bb\": \"b1\"" + "}" + "}\"";
final ObjectMapper mapper = new ObjectMapper();
Map<String, String> myMap = mapper.readValue(json, Map.class);
String contentA = myMap.get("a");
System.out.println(contentA);
String contentB = myMap.get("b");
System.out.println(contentB);
}
}
漂亮的 json 字符串打印
{
"a": "a1",
"b": {
"bb": "b1"
}
}
行 System.out.println(contentA); 产生
a1
行 System.out.println(contentB); 产生
java.lang.ClassCastException:类 java.util.LinkedHashMap 不能 转换为类 java.lang.String (java.util.LinkedHashMap 和 java.lang.String 位于加载程序“bootstrap”的 java.base 模块中) com.demo.DemoTest.test1(DemoTest.java:20)
在调试对象 myMap 时我看到:
{a=a1, b={bb=b1}}
[0]: {a=a1, b={bb=b1}}
[1]: b={bb=b1}
我不明白为什么{bb=b1}被处理为Map
感谢您的帮助。
“b”的值不是字符串,而是(内部)json。 所以你不能真正将它转换为字符串。 Jackson 尝试通过将其转换为
LinkedHashMap
来解决这个内部 json,但它不能放入 myMap
的值中,该值必须是字符串。 LinkedHashMap
无法转换为 String 因此出现错误