Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJSONバイト配列をBase64エンコード・デコードする方法

JSONでバイナリデータを送信する際の一般的な手法は、Base64エンコードを使用することです。Javaには、byte[](バイト配列)をBase64でエンコード・デコードするための方法がいくつか用意されており、その一つがDatatypeConverterクラスです。

ここでは、以下のようなJSONデータを例に説明します。

{
    "menu": {
        "id": "file",
        "value": "File",
        "popup": {
            "menuitem": [
                {"value": "New", "onclick": "CreateNewDoc()"},
                {"value": "Open", "onclick": "OpenDoc()"},
                {"value": "Close", "onclick": "CloseDoc()"}
            ]
        }
    }
}

JSONをBase64にエンコードする

上記のJSONをBase64エンコードするには、次のコードを使用します。

String base64Encoded = DatatypeConverter.printBase64Binary(jsonBytes);
  • JavaでJSONをパースする方法
  • JavaのMapをJSONに変換する方法
  • JavaオブジェクトをJSONに変換する方法

Base64エンコードされたJSONをデコードする

Base64エンコードされたJSONを元の形式に戻すには、次のコードを使用します。

byte[] base64Decoded = DatatypeConverter.parseBase64Binary(base64Encoded);

サンプルコード

エンコードからデコードまでの一連の流れを確認できるサンプルコード全体は以下の通りです。

import javax.xml.bind.DatatypeConverter;

public class JsonEncodeDecode {

    public static void main(String[] args) {
        String json = "{\"menu\": {\n" +
                "  \"id\": \"file\",\n" +
                "  \"value\": \"File\",\n" +
                "  \"popup\": {\n" +
                "    \"menuitem\": [\n" +
                "      {\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"},\n" +
                "      {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"},\n" +
                "      {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}\n" +
                "    ]\n" +
                "  }\n" +
                "}}";

        byte[] bytes = json.getBytes();

        String base64Encoded = DatatypeConverter.printBase64Binary(bytes);
        System.out.println("Encoded Json:\n");
        System.out.println(base64Encoded + "\n");

        byte[] base64Decoded = DatatypeConverter.parseBase64Binary(base64Encoded);
        System.out.println("Decoded Json:\n");
        System.out.println(new String(base64Decoded));
    }
}

実行結果

エンコードされたJSONの出力:

eyJtZW51IjogewogICJpZCI6ICJmaWxlIiwKICAidmFsdW

注: 出力結果は見やすさのために途中で省略しています。実際には非常に長い文字列が出力されます。

デコードされたJSONの出力:

{
    "menu": {
        "id": "file",
        "value": "File",
        "popup": {
            "menuitem": [
                {"value": "New", "onclick": "CreateNewDoc()"},
                {"value": "Open", "onclick": "OpenDoc()"},
                {"value": "Close", "onclick": "CloseDoc()"}
            ]
        }
    }
}

補足:java.util.Base64の利用について

javax.xml.bind.DatatypeConverterはJava 11以降の標準ライブラリから削除されているため、現在の開発ではjava.util.Base64クラスの使用が推奨されています。同じ処理は以下のように書き換えられます。

import java.util.Base64;

// エンコード
String base64Encoded = Base64.getEncoder().encodeToString(bytes);

// デコード
byte[] base64Decoded = Base64.getDecoder().decode(base64Encoded);
  1. AndroidでJSON配列を反復処理する方法をステップごとに解説

    この記事では、Androidアプリ開発においてJSON配列(JSONArray)を反復処理する方法を、実際のサンプルコードとともにステップ形式で解説します。org.jsonパッケージのJSONObjectとJSONArrayクラスを使用して、JSON文字列からデータを取り出し、画面に表示するまでの一連の流れを学べます。完成イメージ本チュートリアルでは、従業員情報(ID・名前・給与)を含むJSON文字列を解析し、各要素を順番に読み取ってTextViewに表示するシンプルなアプリを作成します。手順1:Android Studioで新規プロジェクトを作成するまず、Android Studioを起動し

  2. JavaでJSON配列を作成する方法をわかりやすく解説

    JSON配列とは、角括弧で囲まれた値の順序付きコレクションのことです。具体的には「[」で始まり「]」で終わり、配列内の各値はカンマ(,)で区切られます。JSON配列のサンプル{ books: [Java, JavaFX, Hbase, Cassandra, WebGL, JOGL] }json-simpleは、JSONオブジェクトを処理するための軽量ライブラリです。このライブラリを使えば、JavaプログラムからJSONドキュメントの内容を読み取ったり、書き込んだりすることができます。json-simpleのMaven依存関係json-simpleライブラリを使用するには、まずpom.x