0

在使用 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() 的情况下获得正确的字节数组?

4

0 回答 0