0

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() を使用せずに適切なバイト配列を取得する他の方法はありますか?

4

0 に答える 0