前回はCollectionsユーティリティクラスを使ってリスト操作を便利にする方法を学びました。
今回は「JSON」をJavaで扱う方法を解説します。 JSONはWebAPIのレスポンスやデータのやり取りで広く使われる形式です。今回は追加ライブラリを使わず、標準ライブラリだけでJSONの読み書きを行う方法を学びます。
JSONとは
JSON(JavaScript Object Notation)は、データをテキストで表現するための軽量なフォーマットです。WebAPIのレスポンスやアプリの設定ファイルなど、さまざまな場面で使われています。
{
"name": "ぱんまる",
"age": 25,
"languages": ["Java", "Python"]
}
Javaには標準でJSONを直接扱うクラスが用意されていないため、本来はGsonやJacksonといったライブラリを使うのが一般的です。今回は追加ライブラリなしでJSONを文字列として組み立てる・解析するという基本の考え方を学びます。
サンプルコード(JSONを文字列として作る)
ファイル作成
「Java21」フォルダに JsonBuildTest.java という名前でファイルを作成します

コード入力
以下のコードを入力します。
import java.util.ArrayList;
import java.util.List;
public class JsonBuildTest {
public static void main(String[] args) {
// 単純なJSONオブジェクトを組み立てる
String name = "ぱんまる";
int age = 25;
String email = "panmaru@example.com";
String json = "{"
+ "\"name\": \"" + name + "\","
+ "\"age\": " + age + ","
+ "\"email\": \"" + email + "\""
+ "}";
System.out.println("--- 作成したJSON ---");
System.out.println(json);
// StringBuilderを使って複数のオブジェクトをJSON配列にする
List<String[]> users = new ArrayList<>();
users.add(new String[]{"ぱんまる", "25"});
users.add(new String[]{"たろう", "30"});
users.add(new String[]{"はなこ", "22"});
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < users.size(); i++) {
sb.append("{");
sb.append("\"name\": \"").append(users.get(i)[0]).append("\",");
sb.append("\"age\": ").append(users.get(i)[1]);
sb.append("}");
if (i < users.size() - 1) {
sb.append(",");
}
}
sb.append("]");
System.out.println("\n--- ユーザーのJSON配列 ---");
System.out.println(sb.toString());
}
}

コンパイル
javac JsonBuildTest.java

実行
java JsonBuildTest
実行結果は次のようになります。
--- 作成したJSON ---
{"name": "ぱんまる","age": 25,"email": "panmaru@example.com"}
--- ユーザーのJSON配列 ---
[{"name": "ぱんまる","age": 25},{"name": "たろう","age": 30},{"name": "はなこ","age": 22}]

サンプルコード(JSONの文字列を解析する)
ファイル作成
「Java21」フォルダに JsonParseTest.java という名前でファイルを作成します

コード入力
以下のコードを入力します。
public class JsonParseTest {
public static void main(String[] args) {
String json = "{\"name\": \"ぱんまる\", \"age\": 25, \"email\": \"panmaru@example.com\"}";
System.out.println("--- 解析するJSON ---");
System.out.println(json);
// { } を取り除く
String content = json.trim();
content = content.substring(1, content.length() - 1);
// カンマで分割してキーと値を取り出す
String[] pairs = content.split(",");
System.out.println("\n--- 解析結果 ---");
for (String pair : pairs) {
String[] keyValue = pair.trim().split(": ", 2);
String key = keyValue[0].trim().replace("\"", "");
String value = keyValue[1].trim().replace("\"", "");
System.out.println("キー: " + key + " / 値: " + value);
}
}
}

コンパイル
javac JsonParseTest.java

実行
java JsonParseTest
実行結果は次のようになります。
--- 解析するJSON ---
{"name": "ぱんまる", "age": 25, "email": "panmaru@example.com"}
--- 解析結果 ---
キー: name / 値: ぱんまる
キー: age / 値: 25
キー: email / 値: panmaru@example.com

コードの解説
JSON文字列を作る際は、" をJavaの文字列の中で使うために \" とエスケープする必要があります。今回学んだ StringBuilder の append() を使うと、複数の要素をつなぎ合わせてJSON配列を効率よく組み立てられます。
JSON文字列の解析では、substring(1, content.length() - 1) で先頭と末尾の { } を取り除き、split(",") でカンマ区切りに分割、さらに split(": ", 2) でキーと値に分割しています。split の第2引数に 2 を指定することで、最大2つにしか分割されないようにしています。これにより、値の中に : が含まれていても正しく動作します。最後に replace("\"", "") でダブルクォートを取り除いて完成です。
ただし、今回の解析方法はシンプルなJSONにしか対応できません。値の中にカンマが含まれる場合や、ネストしたJSONオブジェクトが含まれる場合は正しく解析できません。実際の開発では、こうした複雑なケースに対応するためにGsonやJacksonといったライブラリを使います。今回は「JSONの構造とJavaの文字列操作の関係」を理解することが目的です。
まとめ
JSONはキーと値のペアをテキストで表現するフォーマットで、WebAPIのデータやり取りに広く使われています。標準ライブラリだけでも文字列として組み立てたり解析したりすることは可能ですが、複雑なJSONを扱う場合はGsonやJacksonといったライブラリを使うのが実践的です。今回の手作りパーサーを通じてJSONの構造を理解したうえで、次のステップとしてGsonなどのライブラリを試してみると、その便利さが一層実感できるはずです。
2026/07/11(土) ぱんまる


コメント