JavaでJSONオブジェクトをデコードする方法をわかりやすく解説
JSON(JavaScript Object Notation)は、軽量でテキストベース、かつ言語に依存しないデータ交換フォーマットです。JSONでは、オブジェクトと配列という2種類の構造化データを表現できます。
JavaでJSONオブジェクトをデコード(解析・復元)するには、json.simple APIが提供する JSONObject クラスと JSONArray クラスを使用します。これらのクラスはそれぞれ、JSONObject が java.util.Map のように動作し、JSONArray が java.util.List のように動作するため、普段使い慣れたコレクション操作と同じ感覚で扱えるのが特徴です。
JSONデコードの基本的な仕組み
json.simpleライブラリを使ったデコード処理は、以下の手順で行います。
- JSONParser クラスのインスタンスを作成する
parse()メソッドにJSON形式の文字列を渡して解析する- 解析結果を JSONArray または JSONObject にキャストして利用する
なお、不正な形式のJSON文字列を渡した場合は ParseException がスローされるため、try-catchブロックによる例外処理が必要です。例外オブジェクトの getPosition() メソッドを使えば、エラーが発生した文字列内の位置も特定できます。
サンプルコード
以下の例では、ネストしたJSON配列とオブジェクトをデコードし、さらにいくつかの特殊な形式のJSON文字列の解析結果も確認しています。
import org.json.simple.*;
import org.json.simple.parser.*;
public class JSONDecodingTest {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
String str = "[ 0 , {\"1\" : { \"2\" : {\"3\" : {\"4\" : [5, { \"6\" : { \"7\" : 8 } } ] } } } } ]";
try {
Object obj = parser.parse(str);
JSONArray array = (JSONArray) obj;
System.out.println("2番目の配列要素:");
System.out.println(array.get(1));
System.out.println();
JSONObject object2 = (JSONObject) array.get(1);
System.out.println("フィールド \"1\"");
System.out.println(object2.get("1"));
str = "{}";
obj = parser.parse(str);
System.out.println(obj);
str = "[6]";
obj = parser.parse(str);
System.out.println(obj);
str = "[6,,3]";
obj = parser.parse(str);
System.out.println(obj);
} catch (ParseException parseExp) {
System.out.println("例外発生位置: " + parseExp.getPosition());
System.out.println(parseExp);
}
}
}
実行結果
2番目の配列要素:
{"1":{"2":{"3":{"4":[5,{"6":{"7":8}}]}}}}
フィールド "1"
{"2":{"3":{"4":[5,{"6":{"7":8}}]}}}
{}
[6]
[6,3]
実行結果のポイント
この出力から、次のような挙動を読み取ることができます。
- 空のオブジェクト「{}」:そのまま空のJSONObjectとして解析されます。
- 末尾カンマ付きの「[6]」:末尾の余分なカンマは無視され、「6」だけを含む配列として解析されます。
- 連続カンマ付きの「[6,,3]」:連続するカンマも許容され、「6」と「3」を含む配列として解析されます。
このように、json.simple APIは比較的寛容なパースを行う点に注意してください。厳密なJSON仕様に準拠した検証が必要な場合は、JacksonやGsonなど、より厳格なライブラリの利用も検討するとよいでしょう。
-
JavaでJTableをフィルタリングする方法!TableRowSorterとsetRowFilter()の使い方を解説
JTableは、テーブルを柔軟に作成・表示できるSwingのコンポーネントです。テーブルの内容を扱うためのメソッドはTableModelインターフェースで定義されており、実際にはAbstractTableModelクラスを継承して独自のテーブルモデルを実装するのが一般的です。また、JTableではsetCellEditor()メソッドにTableCellEditorインターフェースの実装オブジェクトを渡すことで、セルの編集機能を追加することもできます。 テーブルの表示内容をフィルタリング(絞り込み)するには、TableRowSorterクラスのsetRowFilter()メソッドを使用します。
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー