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

JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説

このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。

JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。

データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。

まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納されたコレクションであり、その値自体がオブジェクトや配列になることもあります。

以下のJSONをサンプルとして、pageNamepost_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が便利です。プロジェクトの要件に合わせて、最適なライブラリを選択しましょう。

  1. AndroidでJSONを解析する方法を徹底解説!初心者向けステップバイステップガイド

    はじめに この記事では、AndroidアプリでJSONデータを解析(パース)する方法を、実際のコード例とともにわかりやすく解説します。JSONはWeb APIなどで広く利用されているデータ形式であり、Android開発においてその扱い方をマスターすることは非常に重要です。 ステップ1:新規プロジェクトの作成 まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。 ステップ2:レイアウトファイルの作成 次に、res/layout/activity_main.xm

  2. 【Java】JSONオブジェクトをファイルに書き込む方法(json-simpleライブラリの使い方)

    JSON(JavaScript Object Notation)は、現在もっとも広く使われているデータ交換フォーマットのひとつです。軽量であることと、特定のプログラミング言語に依存しないことが大きな特徴で、異なるシステム間でのデータやり取りに最適です。 JavaでJSONファイルを読み書きするには、json-simple ライブラリが便利です。json-simpleは軽量なJSON処理ライブラリで、JSONテキストのエンコード(書き込み)とデコード(読み込み)の両方に対応しており、JSON仕様(RFC4627)に完全準拠しています。 ライブラリの準備 json-simpleを使用するには、まず