JavaでJSONArrayをソートする方法をわかりやすく解説
JSON(JavaScript Object Notation)は、広く利用されているデータ交換フォーマットの一つです。軽量であり、特定のプログラミング言語に依存しないという特徴を持っています。
JSONArrayは、文字列からテキストを解析してベクターのようなオブジェクトを生成できるクラスで、java.util.Listインターフェースをサポートしています。この記事では、JSONArrayに格納されたJSONObjectを、指定したキーを基準にソートする方法を紹介します。
ソートの基本的な流れ
JSONArray自体には直接ソートする機能がないため、以下の手順でソートを行います。
- JSONArrayから各要素(JSONObject)を取り出し、
Listに格納します。 Collections.sort()メソッドとComparatorを使って、任意のキー(ここでは「Name」)を基準にリストをソートします。- ソート済みの要素を新しいJSONArrayに戻します。
サンプルコード
import java.util.*;
import org.json.*;
public class SortJSONArrayTest {
public static void main(String[] args) {
String jsonStr = "[ { \"ID\": \"115\", \"Name\": \"Raja\" },"
+ "{ \"ID\": \"120\", \"Name\": \"Jai\" },"
+ "{ \"ID\": \"125\", \"Name\": \"Adithya\" }]";
JSONArray jsonArray = new JSONArray(jsonStr);
JSONArray sortedJsonArray = new JSONArray();
List list = new ArrayList();
// JSONArrayの各要素をListに追加
for(int i = 0; i < jsonArray.length(); i++) {
list.add(jsonArray.getJSONObject(i));
}
System.out.println("Before Sorted JSONArray: " + jsonArray);
// 「Name」キーを基準にソート
Collections.sort(list, new Comparator() {
private static final String KEY_NAME = "Name";
@Override
public int compare(JSONObject a, JSONObject b) {
String str1 = new String();
String str2 = new String();
try {
str1 = (String)a.get(KEY_NAME);
str2 = (String)b.get(KEY_NAME);
} catch(JSONException e) {
e.printStackTrace();
}
return str1.compareTo(str2);
}
});
// ソート結果を新しいJSONArrayに格納
for(int i = 0; i < jsonArray.length(); i++) {
sortedJsonArray.put(list.get(i));
}
System.out.println("Sorted JSON Array with Name: " + sortedJsonArray);
}
}
コードのポイント
- KEY_NAME定数: ソートの基準となるキー名を定義しています。数値や別のキーでソートしたい場合は、この値を変更してください。
- Comparatorのcompare()メソッド: 各JSONObjectから「Name」の値を取得し、
compareTo()で文字列として比較しています。 - 例外処理: キーが存在しない場合などに備えて、
JSONExceptionをキャッチしています。
実行結果
Before Sorted JSONArray:
[{"ID":"115","Name":"Raja"},
{"ID":"120","Name":"Jai"},
{"ID":"125","Name":"Adithya"}]
Sorted JSON Array with Name:
[{"ID":"125","Name":"Adithya"},
{"ID":"120","Name":"Jai"},
{"ID":"115","Name":"Raja"}]
このように、「Name」キーの値がアルファベット順(Adithya → Jai → Raja)に並び替えられていることが確認できます。降順でソートしたい場合は、compare()メソッドの戻り値を逆にするか、Collections.reverseOrder()を組み合わせてください。
-
JavaでJComboBoxの項目をソートする方法!DefaultComboBoxModelのカスタマイズ例
JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドと、ユーザーが値を選択できるドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーがコンボボックスを操作すると、ActionListener、ChangeListener、ItemListenerといったインターフェースを通じてイベントを受け取ることができます。 ただし、標準のJComboBoxにはアイテムを並べ替える(ソートする)機能は用意されていません。そこで本記事では、DefaultComboBoxModelクラスを継承した独自のモデルクラスを作成し、コンボボックスの項目を常に整序された
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー