【Java】jsonをオブジェクトに変換したい!Jackson(ObjectMapper)使ってみるよ!

前回はオブジェクトをJsonに変換する方法を紹介しました

今回はその逆です!

Jacksonライブラリを使用してJSON文字列をJavaオブジェクトに変換することもできます
以下はその方法です

まず、Jacksonライブラリをプロジェクトに追加する必要があります
Mavenを使用している場合は、pom.xmlファイルに以下の依存関係を追加します

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>〇.〇〇.〇</version> <!-- 「〇」は使用しているJacksonのバージョンに置き換えてください -->
</dependency>

Gradleを使用している場合は、build.gradleファイルに以下の依存関係を追加します

implementation 'com.fasterxml.jackson.core:jackson-databind:〇.〇〇.〇' // 「〇」は使用しているJacksonのバージョンに置き換えてください

では、Jacksonライブラリを使用してJSON文字列をJavaオブジェクトに変換していきます

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) throws Exception {
        // JSON文字列
        String json = "{\"name\":\"John\",\"age\":30}";

        // JacksonのObjectMapperを作成します。
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON文字列をJavaオブジェクトに変換します。
        Person person = objectMapper.readValue(json, Person.class);

        // 変換されたJavaオブジェクトを出力します。
        System.out.println(person.getName()); // John
        System.out.println(person.getAge());  // 30
    }

    // Personクラスは前の例と同じものを使用します。
    static class Person {
        private String name;
        private int age;

        // コンストラクタ、ゲッター、セッターを省略します。

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

上記の例ではreadValue()メソッドを使用してJSON文字列をPersonオブジェクトに変換しています

JSON文字列と変換するクラスの型を指定する必要があります

これにより、JSON文字列がJavaオブジェクトにデシリアライズされ、その後、オブジェクトのフィールドにアクセスすることができます

このようにして、JSON文字列をJavaオブジェクトに逆シリアル化することができます

ちなみに、

JSON文字列のキーがJavaオブジェクトのフィールド名と一致している場合、Jacksonは自動的にJSONのキーを対応するJavaオブジェクトのフィールドにマッピングしますが、キーとフィールドが一致しない場合はマッピングされないので、Jacksonでは@JsonPropertyアノテーションを使用して手動でマッピングを行うことをしなくてはなりません(以下のイメージ)

@JsonProperty("fullName") // 「"〇"はJsonのキー」

是非参考ください!

ではっ

是非フォローしてください

最新の情報をお伝えします