【Java】Jacksonで大文字・小文字の区別なくJson変換する


Jacksonを使っていて以下のケースに遭遇し、対応した際のメモです。

■問題のケース
JacksonでJson文字列 ⇔ Javaオブジェクトの変換をしていて、
Jsonのパラメータ名は大文字だけどオブジェクトのプロパティ名は小文字・・・
みたいな場合、デフォルトの設定では変換ができない。(異なるパラメータとみなしてしまう。)

※JacksonはJavaのライブラリで、 JSONパース用のライブラリです。

【参考URL】
・Jackson使い方メモ(外部リンク)
https://qiita.com/opengl-8080/items/b613b9b3bc5d796c840c
Jacksonの基本的な使い方がまとめられています。
MavenやGradleを使っているプロジェクトの場合のセットアップも載っています。


解決策

以下のオプションを設定してから変換する。
MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES を「true」に設定

サンプル

import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Sample {

	public static void main(String[] args) {

		// Json文字列
		String str = "{\"ID\":1, \"NAME\":\"pjin_user\",\"AGE\":30}";

		// マッパーを用意
		ObjectMapper mapper = new ObjectMapper();

		// 大文字・小文字の区別をなくす
		mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

		try {
			Member member = new Member();

			// Json文字列 ⇒ Memberクラスにパース
			member = mapper.readValue(str, Member.class);

			System.out.println(member);

		} catch (Exception e) {

			System.out.println("エラーだよ");

		}
	}
}

class Member {

	public int id;

	public String name;

	public int age;

	@Override
	public String toString() {
		return "{ id : " + this.id + ", name : " + this.name + ", age : " + this.age + " }";
	}

}

解説

9行目の文字列が元のJson文字列で、各パラメータ名が小文字となっている一方、
33行目からのMemberクラスがパース用のクラスで、各プロパティ名が大文字となっています。

特に設定をせずにreadValue(21行目)してしまうと、エラーとなるのですが、
15行目の設定を入れていることにより、大文字小文字の区別がなくなりエラーを回避できます。

↓ 実行結果(コンソール)

▼以下を確認しましょう
15行目を削除 or コメントアウトして、エラーとなる事を確認しましょう。


以上、Jacksonで大文字・小文字の区別を回避した際のメモでした。

関連記事
【Java】Jacksonセットアップメモ(jar使用)

  • このエントリーをはてなブックマークに追加

PAGE TOP