早くなんとかしないと…

社会人としてもシステムエンジニアとしても駄目になってしまう…

JavaでJSON

JavaJSONを扱うことになりそう、とのことで事前学習。


JSONとは?

JSON (JavaScript Object Notation)は、軽量のデータ交換フォーマットです。

JSON http://www.json.org/json-ja.html より
日本語だと、上記URLが一次情報?


JavaJSON

外部ライブラリを使わずに、JavaJSONを扱おうとすると、下記URLの実装になるみたいです。
Java SEの標準APIだけでJSONを扱うサンプル(JDK 1.6以降、1.8も対応) - ぐーたら書房


Javaで利用されているJSONの外部ライブラリ

下記2つが主に利用されていそう。

Jackson

JacksonはJava7以上で利用可能っぽいです。
(Java6だとObjectMapperクラスを呼び出した時点で落ちました。)

一時情報として見るべきWikiは下記URL?
JacksonHome - FasterXML Wiki

Jacksonを利用するに当たって、下記URLを参考にしました。
Jacksonの便利な使い方 [初心者向け] - Qiita
Java Jacksonの基本的な使い方 | 酒と涙とRubyとRailsと

今回動作確認で作成したPOJOは下記Userクラス。

public class User {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

}

…で動作確認はこんな感じでやりました。

public class JacksonSample {
    private static ObjectMapper om = new ObjectMapper();

    public static void main(String[] args) throws Exception {
        // POJO→JSON
        User user1 = new User();
        user1.setId(1);
        user1.setName("HAL");
        String json1 = om.writeValueAsString(user1);
        System.out.println(json1);

        // JSON→POJO
        String json2 = "{\"id\":\"2\", \"name\":\"PET\"}";
        User user2 = om.readValue(json2, User.class);
        System.out.println("id:" + user2.getId());
        System.out.println("name:" + user2.getName());
    }
}
Jsonic

先にJsonicの動作確認コードをば。

public class JsonicSample {
    public static void main(String[] args) {
        // POJO→JSON
        User user1 = new User();
        user1.setId(1);
        user1.setName("HAL");
        String json1 = JSON.encode(user1);
        System.out.println(json1);

        // JSON→POJO
        String json2 = "{\"id\":\"2\", \"name\":\"PET\"}";
        User user2 = JSON.decode(json2, User.class);
        System.out.println("id:" + user2.getId());
        System.out.println("name:" + user2.getName());
    }
}

JsonicはJava6以上で利用可能です。

Jsonicの一次情報は下記URL。
http://jsonic.osdn.jp/

Jsonic、こんな感じでも使えるよ~ということで、参考になりそうなURLは下記。
Java JSONICでjsonな文字列をオブジェクトに直接デコード - Symfoware
jsonicのlistだけを持つクラスを使いたくない場合 - だましだまし


一次情報をチェックすることを心がけようとしているのですが、やはり英語が多い…。
英語が読めないと厳しいなあと思う、今日この頃…。

あとググる前にダウンロードファイル確認しよう。
Sampleちゃんと入ってたの、あとから気づいた…。



↓↓↓2017/07/30 追記
Javaで利用されているJSONの外部ライブラリとしてもうひとつ、Googleが提供しているGsonを見つけたので、試してみました。

Gsonの一次情報は下記URL。
GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back

動作確認のコードは下記。

public class GsonSample {
    public static void main(String[] args) {
        // POJO→JSON
        User user1 = new User();
        user1.setId(1);
        user1.setName("HAL");
        Gson gson = new Gson();
        String json1 = gson.toJson(user1);
        System.out.println(json1);

        // JSON→POJO
        String json2 = "{\"id\":\"2\", \"name\":\"PET\"}";
        User user2 = gson.fromJson(json2, User.class);
        System.out.println("id:" + user2.getId());
        System.out.println("name:" + user2.getName());
    }
}

上記のコードを書くにあたって、UserGuideのObject Examplesを参考にしました。
gson/UserGuide.md at master · google/gson · GitHub


基本の使い方は、ほぼほぼ同じみたいですね。