A - 解释
您可以使用杰克逊库,用于将 JSON 字符串绑定到POJO(普通旧 Java 对象) 实例。 POJO 只是一个只有私有字段和公共 getter/setter 方法的类。杰克逊将遍历这些方法(使用反射),并将 JSON 对象映射到 POJO 实例,因为类的字段名称适合 JSON 对象的字段名称。
在您的 JSON 对象中,它实际上是一个合成的对象,主对象由两个子对象组成。因此,我们的 POJO 类应该具有相同的层次结构。我将整个 JSON 对象称为页目的。页对象由一个页面信息对象和一个邮政对象数组。
所以我们必须创建三个不同的 POJO 类;
-
页类,复合的页面信息类和数组邮政实例
-
页面信息班级
-
帖子班级
我使用的唯一包是 Jackson ObjectMapper,我们所做的是绑定数据;
com.fasterxml.jackson.databind.ObjectMapper
所需的依赖项,jar 文件列在下面;
- 杰克逊核心-2.5.1.jar
- 杰克逊-databind-2.5.1.jar
-
杰克逊-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(" Page Name : " + pageInfo.getPageName());
System.out.println(" Page 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(" Post Id : " + post.getPost_id());
System.out.println(" Actor Id : " + post.getActor_id());
System.out.println(" Pic Of Person Who Posted : " + post.getPicOfPersonWhoPosted());
System.out.println(" Name Of Person Who Posted : " + post.getNameOfPersonWhoPosted());
System.out.println(" Message : " + post.getMessage());
System.out.println(" Likes Count : " + post.getLikesCount());
System.out.println(" Comments : " + Arrays.toString(post.getComments()));
System.out.println(" Time 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