在使用 String.valueof(char array).getBytes("UTF-8") 和 new ObjectMapper.writeValueAsBytes(char array) 将字符数组转换为字节时,我得到了不同的字节数组集
例如:
char[] d = {'{','\n','"','k','e','y','"',':',' ','"','v','a','l','u','e','"','}'};
byte[] stringBytes = String.valueOf(d).getBytes("UTF-8");
byte[] objectMapperBytes = new ObjectMapper().writeValueAsBytes(d);
System.out.println(Arrays.toString(stringBytes));
System.out.println(Arrays.toString(objectMapperBytes));
JsonNode stringBytesNode = new ObjectMapper().readValue(stringBytes, JsonNode.class);
JsonNode objMapperBytesNode = new ObjectMapper().readValue(objectMapperBytes, JsonNode.class);
System.out.println(stringBytesNode.isObject());
System.out.println(objMapperBytesNode.isObject());
输出:
[123, 10, 34, 107, 101, 121, 34, 58, 32, 34, 118, 97, 108, 117, 101, 34, 125]
[34, 123, 92, 110, 92, 34, 107, 101, 121, 92, 34, 58, 32, 92, 34, 118, 97, 108, 117, 101, 92, 34, 125, 34]
true
false
在验证该站点的字节编码图表时,我认为 ObjectMapper.writeValueAsBytes() 将 \ 和 n 视为 2 个不同的字符,并且还在开头和结尾添加了双引号字符。由于这种行为,在将此字节转换为 JsonNode 时,我得到了不能用于操作 Json 的 TextNode
String.getBytes() 将 \n 视为单个字符,并且不会在开头和结尾添加双引号字符。在将此字节转换为 JsonNode 时,我得到了可用于操作 Json 的 ObjectNode
有没有办法配置 ObjectMapper 使其在将字节转换为 JsonNode 时不创建 TextNode ?或者有没有其他方法可以在不使用 String.getBytes() 的情况下获得正确的字节数组?