String.valueof(char array).getBytes("UTF-8") および new ObjectMapper.writeValueAsBytes(char array) を使用して Character 配列をバイトに変換しているときに、異なるバイト配列のセットを取得しています
例:
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 を 1 文字と見なし、先頭と末尾に二重引用符を追加しません。このバイトを JsonNode に変換しているときに、Json の操作に使用できる ObjectNode を取得しています
バイトを JsonNode に変換するときに TextNode を作成しないように ObjectMapper を構成する方法はありますか? または String.getBytes() を使用せずに適切なバイト配列を取得する他の方法はありますか?