Javaのプログラム開発でJSONデータをパースする処理は、様々な場面で利用されています。
今回は、JSONデータのパースに関する基本的な情報から、JSONデータのパース処理で頻繁に利用される「Jackson」ライブラリの使い方を合わせてご紹介していきます。
JavaでJSONデータをパースするとは?
そもそもJavaでJSONデータをパースするとは何を意味するのかについて簡単にご紹介しておきます。
JSONデータ
JSONとは「JavaScript Object Notation」の略称で、JavaScriptのオブジェクト記法を用いたデータ・フォーマットです。
名前の通り、JavaScriptで利用されるのはもちろん、JavaやPHP・Pythonといった各種プログラミング言語の開発で利用されています。
主な利用用途としては、JavaScriptを始めとしたフロントエンド言語と今回ご紹介するようなJavaを始めとしたサーバーサイド言語とのデータのやり取りで利用されます。
サンプル
JSONフォーマットは「{}」にkeyとvalueをコロンで区切った形で記述します。
key項目に関しては必ずダブルクオーテーションで囲う必要があります。
{"key": "value"}
カンマで区切ることで複数項目の記述が可能で、valueには文字列以外にも数値、null、オブジェクト、配列など様々な値を設定することが出来ます。
※下記は項目毎にvalueの値を変更したサンプルです。
{ "string": "value", "number": 1, "null": null, "object": { "key": "value", "key": "value" }, "array": [ "value", "value" ] }
パースする
次にパースするとはどういった処理なのかについてですが、パースはデータを解析し必要なデータを取り出すことを意味します。
つまりJSON形式のデータから必要なデータを取り出して、Javaプログラムで利用出来るようにすることをパースすると表現しています。
JSONデータの中から必要なkeyに設定された値だけを取得したり、JSONデータからJavaのオブジェクトに変換するなど、利用用途は様々です。
JavaのライブラリでJSONデータをパースする
Javaの標準APIでもJSONデータをパースすることは可能ですが、より高機能で手軽な「Jackson」というライブラリを利用したJSONパース処理をご紹介していきます。
jarファイルのダウンロード
Jacksonの利用にはいくつかの方法がありますが、今回はjarファイルをローカル環境にダウンロードして利用する方法についてご紹介していきます。
まずは「Jackson Core」「Jackson Annotations」「Jackson Databind」3つのjarファイルをダウンロードしましょう。
Eclipseでクラスパスの設定
ダウンロードしてきたjarファイルはクラスパスを通すことで利用可能な状態となります。
今回は利用者の多い統合開発環境Eclipseでのクラスパスの設定方法についてご紹介します。
Eclipseでは「パッケージエクスプローラー」に表示されているプロジェクト名を右クリックし、「ビルド・パス」→「外部アーカイブの追加」を選択することで外部から入手したjarファイルが利用可能となります。
取り込みが完了すると「参照ライブラリー」に追加したjarファイルが表示されていることをご確認頂けます。
JsonNodeを利用したサンプル
JSON形式のデータを、Javaのオブジェクトなどに変換せず、そのままプログラム開発に利用したい場合には、JsonNodeを利用する方法が便利です。
package test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) { String json = "{\"text1\": \"サンプル\", \"number1\": 5}"; // 解説1 ObjectMapper mapper = new ObjectMapper(); // 解説2 try { JsonNode node = mapper.readTree(json); // 解説2 String name = node.get("text1").textValue(); // 解説3 int number = node.get("number1").intValue(); // 解説3 System.out.println(name); System.out.println(number); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
実行した結果が下記の通りです。
サンプル 5
解説1
Javaのソースコードに直接JSONデータを記述し、変数「json」に格納しています。
Javaのファイル入出力を利用して、JSONファイルのデータを取り込むことも可能です。
解説2
ObjectMapperは、jacksonライブラリに含まれるクラスです。
インスタンス化した後、「readTree」メソッドを利用し、指定したJSON文字列から「JsonNode」型にデータを変換し格納しています。
解説3
JsonNodeに格納した値は、getメソッドの引数にkey項目を指定することで取り出すことが可能です。
実際に指定された値を取り出す場合には、「textValue」や「intValue」といったメソッドを利用することで値の取り出しが可能です。
JSONデータをJavaオブジェクトに変換
続いてJSON形式のデータを、用意したJavaオブジェクトに変換する方法についてご紹介していきます。
サンプルでは「Main.java」と同一階層に「User.java」というファイルを下記の内容で作成しました。
package test; public class User { public String firstName; public String lastName; public int age; }
Main.javaは下記のように変更します。
package test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) { String json = "{\"firstName\": \"花子\", \"lastName\": \"山田\", \"age\": 25}"; ObjectMapper mapper = new ObjectMapper(); try { User user = mapper.readValue(json, User.class); // 解説 System.out.println(user.firstName); System.out.println(user.lastName); System.out.println(user.age); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
実行した結果は下記の通りです。
花子 山田 25
解説
基本的な構成は、上述したJSONデータをJsonNodeに変換するケースと同じですが、ObjectMapperの「readValue」メソッドを利用して実装を行います。
JSONのkey項目とJavaオブジェクトのフィールド名を合わせておくことで、型として指定したJavaオブジェクトにJSONの値が格納され、通常のJavaオブジェクトと同様の方法で値を取得することが出来るようになります。
JavaオブジェクトをJSONデータに変換
では反対にJavaオブジェクトをJSONデータに変換する方法も合わせて確認しておきましょう。
Main.javaを下記のように変更しました。
package test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) { User user = new User(); user.firstName = "花子"; user.lastName = "山田"; user.age = 25; ObjectMapper mapper = new ObjectMapper(); try { String json = mapper.writeValueAsString(user); // 解説 System.out.println(json); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
実行した結果が下記の通りです。
{"firstName":"花子","lastName":"山田","age":25}
解説
JavaオブジェクトからJSON形式に変換する際には、ObjectMapperの「writeValueAsString」メソッドを利用することで実現可能です。
引数に任意のJavaオブジェクトを設定することで、JSON形式の文字列が返却されます。
さいごに: JSONデータのパースはJava頻出処理の1つ
本記事では、Javaのシステム開発で頻繁に利用されるJSONデータのパース処理について、基本的な情報からJacksonというライブラリを利用した実際の処理サンプルをご紹介してきました。
JSONパース用のライブラリとしては、Jackson以外にも「GSON」などが人気ライブラリとして利用されています。
Javaの標準APIでもJSONのパース処理を実施することは可能ですが、今回ご紹介したJacksonのようなライブラリを利用することで、様々な処理を簡単に実現することが可能です。
JSONパース処理の基本を理解した上で、積極的にライブラリを活用してJavaのシステム開発を効率化していきましょう。
いくつかのバージョンがダウンロード可能ですが、基本的には最新バージョンをダウンロードしておけば問題ありません。
異なるバージョンをダウンロードする場合でも、各種jarファイルのバージョンは合わせておくのが基本ということだけ意識しておきましょう。