JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説
このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。
JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。
データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。
まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納されたコレクションであり、その値自体がオブジェクトや配列になることもあります。
以下のJSONをサンプルとして、pageNameやpost_idなどの値を取得する方法を見ていきましょう。
{
"pageInfo": {
"pageName": "Homepage",
"logo": "https://www.example.com/logo.jpg"
},
"posts": [
{
"post_id": "0123456789",
"actor_id": "1001",
"author_name": "Jane Doe",
"post_title": "How to parse JSON in Java",
"comments": [],
"time_of_post": "1234567890"
}
]
}
org.jsonを使ってJSONをパースする
org.jsonでJSONを解析するには、まずライブラリを依存関係に追加する必要があります。Mavenリポジトリから入手できます。
import org.json.JSONArray;
import org.json.JSONObject;
public class ParseJSON {
static String json = "...";
public static void main(String[] args) {
JSONObject obj = new JSONObject(json);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");
System.out.println(pageName);
JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++) {
String post_id = arr.getJSONObject(i).getString("post_id");
System.out.println(post_id);
}
}
}
注意:コード中の "..." の部分には、実際のJSON文字列を代入してください。上記のコードでは可読性のために省略しています。
処理の流れとしては、まずJSONObjectクラスを使ってJSON文字列をJSONオブジェクトに変換します。
「pageInfo」はJSONオブジェクトなので、getJSONObjectメソッドを使用して取得します。
同様に、「posts」はJSON配列なので、getJSONArrayメソッドを使う必要があります。
- JavaオブジェクトをJSONに変換する方法
- JavaのMapをJSONに変換する方法
- JSONのエンコード・デコードの方法
Gsonを使ってJSONをパースする
GsonでJSONを解析する場合も、ライブラリを依存関係に追加します。最新版はMavenリポジトリから入手できます。
以下は、先ほどのJSONをGsonでパースする例です。
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class ParseJSON {
static String json = "...";
public static void main(String[] args) {
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
System.out.println(pageName);
JsonArray arr = jsonObject.getAsJsonArray("posts");
for (int i = 0; i < arr.size(); i++) {
String post_id = arr.get(i).getAsJsonObject().get("post_id").getAsString();
System.out.println(post_id);
}
}
}
こちらも同様に、"..." の部分は実際のJSON文字列に置き換えてください。
補足:Gsonの新しいバージョンでは、非推奨となった new JsonParser().parse() の代わりに、JsonParser.parseString(json) を使用することが推奨されています。
JsonPathを使ってJSONをパースする
これまでの2つの例では、目的のプロパティにアクセスする前に、JSON全体をJavaオブジェクトへデシリアライズする必要がありました。これに対する別のアプローチがJsonPathです。JsonPathは、XMLにおけるXPathのようにJSONを扱えるライブラリで、JSONオブジェクト内を直接トラバース(走査)できます。
こちらも同様に、Mavenリポジトリから依存関係として追加してください。
例えば、先ほどのJSONを解析するには、次のように記述します。
import com.jayway.jsonpath.JsonPath;
public class ParseJSON {
static String json = "...";
public static void main(String[] args) {
String pageName = JsonPath.read(json, "$.pageInfo.pageName");
System.out.println(pageName);
Integer posts = JsonPath.read(json, "$.posts.length()");
for(int i=0; i < posts; i++) {
String post_id = JsonPath.read(json, "$.posts[" + i + "].post_id");
System.out.println(post_id);
}
}
}
まとめ
JavaでJSONをパースする方法として、org.json、Gson、JsonPathの3つのライブラリを紹介しました。シンプルな用途であればorg.jsonやGsonが適しており、JSONの一部だけを手軽に取り出したい場合はJsonPathが便利です。プロジェクトの要件に合わせて、最適なライブラリを選択しましょう。
-
AndroidでJSONを解析する方法を徹底解説!初心者向けステップバイステップガイド
はじめに この記事では、AndroidアプリでJSONデータを解析(パース)する方法を、実際のコード例とともにわかりやすく解説します。JSONはWeb APIなどで広く利用されているデータ形式であり、Android開発においてその扱い方をマスターすることは非常に重要です。 ステップ1:新規プロジェクトの作成 まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。 ステップ2:レイアウトファイルの作成 次に、res/layout/activity_main.xm
-
【Java】JSONオブジェクトをファイルに書き込む方法(json-simpleライブラリの使い方)
JSON(JavaScript Object Notation)は、現在もっとも広く使われているデータ交換フォーマットのひとつです。軽量であることと、特定のプログラミング言語に依存しないことが大きな特徴で、異なるシステム間でのデータやり取りに最適です。 JavaでJSONファイルを読み書きするには、json-simple ライブラリが便利です。json-simpleは軽量なJSON処理ライブラリで、JSONテキストのエンコード(書き込み)とデコード(読み込み)の両方に対応しており、JSON仕様(RFC4627)に完全準拠しています。 ライブラリの準備 json-simpleを使用するには、まず