A-説明
JSONライブラリーをPOJO(Plain Old Java Object)インスタンスにバインドするために、Jacksonライブラリーを使用できます。POJOは、プライベートフィールドとパブリックゲッター/セッターメソッドのみを含むクラスです。ジャクソンは(リフレクションを使用して)メソッドをトラバースし、クラスのフィールド名がJSONオブジェクトのフィールド名と一致するように、JSONオブジェクトをPOJOインスタンスにマップします。
実際には複合オブジェクトであるJSONオブジェクトでは、メインオブジェクトは2つのサブオブジェクトで構成されます。したがって、POJOクラスは同じ階層を持つ必要があります。JSONオブジェクト全体をPageオブジェクトとして呼び出します。Pageオブジェクトは、PageInfoオブジェクトとPostで構成されますオブジェクト配列でます。
したがって、3つの異なるPOJOクラスを作成する必要があります。
- ページクラス、PageInfoクラスとポストインスタンスの配列の複合
- PageInfoクラス
- 投稿クラス
私が使用した唯一のパッケージはJackson ObjectMapperです。
com.fasterxml.jackson.databind.ObjectMapper
必要な依存関係、jarファイルを以下にリストします。
- jackson-core-2.5.1.jar
- jackson-databind-2.5.1.jar
- jackson-annotations-2.5.0.jar
必要なコードは次のとおりです。
B-メインPOJOクラス:ページ
package com.levo.jsonex.model;
public class Page {
    private PageInfo pageInfo;
    private Post[] posts;
    public PageInfo getPageInfo() {
        return pageInfo;
    }
    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }
    public Post[] getPosts() {
        return posts;
    }
    public void setPosts(Post[] posts) {
        this.posts = posts;
    }
}
C-子POJOクラス:PageInfo
package com.levo.jsonex.model;
public class PageInfo {
    private String pageName;
    private String pagePic;
    public String getPageName() {
        return pageName;
    }
    public void setPageName(String pageName) {
        this.pageName = pageName;
    }
    public String getPagePic() {
        return pagePic;
    }
    public void setPagePic(String pagePic) {
        this.pagePic = pagePic;
    }
}
D-子POJOクラス:投稿
package com.levo.jsonex.model;
public class Post {
    private String post_id;
    private String actor_id;
    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private int likesCount;
    private String[] comments;
    private int timeOfPost;
    public String getPost_id() {
        return post_id;
    }
    public void setPost_id(String post_id) {
        this.post_id = post_id;
    }
    public String getActor_id() {
        return actor_id;
    }
    public void setActor_id(String actor_id) {
        this.actor_id = actor_id;
    }
    public String getPicOfPersonWhoPosted() {
        return picOfPersonWhoPosted;
    }
    public void setPicOfPersonWhoPosted(String picOfPersonWhoPosted) {
        this.picOfPersonWhoPosted = picOfPersonWhoPosted;
    }
    public String getNameOfPersonWhoPosted() {
        return nameOfPersonWhoPosted;
    }
    public void setNameOfPersonWhoPosted(String nameOfPersonWhoPosted) {
        this.nameOfPersonWhoPosted = nameOfPersonWhoPosted;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public int getLikesCount() {
        return likesCount;
    }
    public void setLikesCount(int likesCount) {
        this.likesCount = likesCount;
    }
    public String[] getComments() {
        return comments;
    }
    public void setComments(String[] comments) {
        this.comments = comments;
    }
    public int getTimeOfPost() {
        return timeOfPost;
    }
    public void setTimeOfPost(int timeOfPost) {
        this.timeOfPost = timeOfPost;
    }
}
E-サンプルJSONファイル:sampleJSONFile.json
JSONサンプルをこのファイルにコピーして、プロジェクトフォルダーの下に配置しました。
{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}
F-デモコード
package com.levo.jsonex;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.levo.jsonex.model.Page;
import com.levo.jsonex.model.PageInfo;
import com.levo.jsonex.model.Post;
public class JSONDemo {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Page page = objectMapper.readValue(new File("sampleJSONFile.json"), Page.class);
            printParsedObject(page);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void printParsedObject(Page page) {
        printPageInfo(page.getPageInfo());
        System.out.println();
        printPosts(page.getPosts());
    }
    private static void printPageInfo(PageInfo pageInfo) {
        System.out.println("Page Info;");
        System.out.println("**********");
        System.out.println("\tPage Name : " + pageInfo.getPageName());
        System.out.println("\tPage Pic  : " + pageInfo.getPagePic());
    }
    private static void printPosts(Post[] posts) {
        System.out.println("Page Posts;");
        System.out.println("**********");
        for(Post post : posts) {
            printPost(post);
        }
    }
    private static void printPost(Post post) {
        System.out.println("\tPost Id                   : " + post.getPost_id());
        System.out.println("\tActor Id                  : " + post.getActor_id());
        System.out.println("\tPic Of Person Who Posted  : " + post.getPicOfPersonWhoPosted());
        System.out.println("\tName Of Person Who Posted : " + post.getNameOfPersonWhoPosted());
        System.out.println("\tMessage                   : " + post.getMessage());
        System.out.println("\tLikes Count               : " + post.getLikesCount());
        System.out.println("\tComments                  : " + Arrays.toString(post.getComments()));
        System.out.println("\tTime Of Post              : " + post.getTimeOfPost());
    }
}
G-デモ出力
Page Info;
****(*****
    Page Name : abc
    Page Pic  : http://example.com/content.jpg
Page Posts;
**********
    Post Id                   : 123456789012_123456789012
    Actor Id                  : 1234567890
    Pic Of Person Who Posted  : http://example.com/photo.jpg
    Name Of Person Who Posted : Jane Doe
    Message                   : Sounds cool. Can't wait to see it!
    Likes Count               : 2
    Comments                  : []
    Time Of Post              : 1234567890