Java 从api.facebook.com解析json

Java 从api.facebook.com解析json,java,facebook,json,facebook-graph-api,Java,Facebook,Json,Facebook Graph Api,如何使用java解析json(对于独立java应用程序)?我尝试了gson和Jackson库,但它们似乎有问题,因为这个json的格式看起来不同 你是怎么做到的 考虑到facebook的流行,我希望找到一些JAR/lib可以做到这一点。最欢迎有实例的建议。多谢 Response.java public class Response{ private List<Comments> commentslist; public List<Comments> getComment

如何使用java解析json(对于独立java应用程序)?我尝试了gson和Jackson库,但它们似乎有问题,因为这个json的格式看起来不同

你是怎么做到的

考虑到facebook的流行,我希望找到一些JAR/lib可以做到这一点。最欢迎有实例的建议。多谢

Response.java

public class Response{
private List<Comments> commentslist;

public List<Comments> getCommentsList() {
    return commentslist;
}

public void setCommentsList(List<Comments> commentslist) {
    this.commentslist = commentslist;
}
}
public class Comments{
private Number count;
private List<Data> data;

public Number getCount(){
    return this.count;
}
public void setCount(Number count){
    this.count = count;
}
public List<Data> getData(){
    return this.data;
}
public void setData(List<Data> data){
    this.data = data;
}
}
public class From{
    private Number id;
private String name;

public Number getId(){
    return this.id;
}
public void setId(Number id){
    this.id = id;
}
public String getName(){
    return this.name;
}
public void setName(String name){
    this.name = name;
}
}
public class Data{
private Number created_time;
private From from;
private Number id;
private String message;

public Number getCreated_time(){
    return this.created_time;
}
public void setCreated_time(Number created_time){
    this.created_time = created_time;
}
public From getFrom(){
    return this.from;
}
public void setFrom(From from){
    this.from = from;
}
public Number getId(){
    return this.id;
}
public void setId(Number id){
    this.id = id;
}
public String getMessage(){
    return this.message;
}
public void setMessage(String message){
    this.message = message;
}
}
Data.java

public class Response{
private List<Comments> commentslist;

public List<Comments> getCommentsList() {
    return commentslist;
}

public void setCommentsList(List<Comments> commentslist) {
    this.commentslist = commentslist;
}
}
public class Comments{
private Number count;
private List<Data> data;

public Number getCount(){
    return this.count;
}
public void setCount(Number count){
    this.count = count;
}
public List<Data> getData(){
    return this.data;
}
public void setData(List<Data> data){
    this.data = data;
}
}
public class From{
    private Number id;
private String name;

public Number getId(){
    return this.id;
}
public void setId(Number id){
    this.id = id;
}
public String getName(){
    return this.name;
}
public void setName(String name){
    this.name = name;
}
}
public class Data{
private Number created_time;
private From from;
private Number id;
private String message;

public Number getCreated_time(){
    return this.created_time;
}
public void setCreated_time(Number created_time){
    this.created_time = created_time;
}
public From getFrom(){
    return this.from;
}
public void setFrom(From from){
    this.from = from;
}
public Number getId(){
    return this.id;
}
public void setId(Number id){
    this.id = id;
}
public String getMessage(){
    return this.message;
}
public void setMessage(String message){
    this.message = message;
}
}
使用gson会话尝试失败

Response response = gson.fromJson(contents, Response.class); //contents is json string
System.out.println(response.getCommentsList()); // comes back as null

如果json是正常的,那么我的java模型有什么问题吗?

您正在尝试将json响应(一个对象数组)反序列化为一个带有注释(注释)列表(注释列表)的对象(响应)。存在类型/结构不匹配,GSON将无法对其进行反序列化

试着做一些类似的事情:

Gson gson = new Gson();
Type collectionType = new TypeToken<List<Response>>(){}.getType();
List<Comments> commentList = gson.fromJson(yourJsonString, collectionType);

来自fb的json是一个响应(匿名)对象列表,其中有一个名为comments的字段。注释,不管名称如何,实际上是一个对象。

您正在尝试将JSON响应(一个对象数组)反序列化为带有注释(注释)列表(注释列表)的对象(响应)。存在类型/结构不匹配,GSON将无法对其进行反序列化

试着做一些类似的事情:

Gson gson = new Gson();
Type collectionType = new TypeToken<List<Response>>(){}.getType();
List<Comments> commentList = gson.fromJson(yourJsonString, collectionType);
来自fb的json是一个响应(匿名)对象列表,其中有一个名为comments的字段。注释,不管名称如何,实际上是一个对象。

JSON很好。JSON中的顶部容器是一个数组,而不是一个对象。尝试:

List<Response> responses = gson.fromJson( contents, Response.class );
System.out.println(responses[0].getCommentsList());
List responses=gson.fromJson(contents,Response.class);
System.out.println(响应[0].getCommentsList());
JSON很好。JSON中的顶部容器是一个数组,而不是一个对象。尝试:

List<Response> responses = gson.fromJson( contents, Response.class );
System.out.println(responses[0].getCommentsList());
List responses=gson.fromJson(contents,Response.class);
System.out.println(响应[0].getCommentsList());


您的链接看起来像普通的JSON。如果它不起作用,我会认为您的实现是不正确的。如果不查看您的代码,我们就无法判断。@AedonEtLIRA添加了代码以供参考。谢谢。我不太熟悉Gson,但这是不是应该使用反射来解析JSON字符串?@AedonEtLIRA是的,这是正确的。我没有使用gson的要求。我完全愿意接受任何其他可行的建议。你能告诉我你的解决方案吗?如果是以下任何一项,请将其作为答案进行检查,否则,请提供您自己的答案。您的链接看起来像普通的JSON。如果它不起作用,我会认为您的实现是不正确的。如果不查看您的代码,我们就无法判断。@AedonEtLIRA添加了代码以供参考。谢谢。我不太熟悉Gson,但这是不是应该使用反射来解析JSON字符串?@AedonEtLIRA是的,这是正确的。我没有使用gson的要求。我完全愿意接受任何其他可行的建议。你能告诉我你的解决方案吗?如果是以下任何一项,请将其作为答案进行检查,否则,请提供您自己的答案。我在尝试时遇到此错误。线程“main”com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列为BEGIN_对象。嗯,您可以尝试另一种方法吗。填充您的POJO数据模型并将其序列化为json,看看它是否生成了与facebook返回的结构类似的结构?json与facebook json不同——这是我最初的直觉。我很惊讶没有库可以直接解析这些评论。{“评论”:[{“计数”:2,“数据”:[{“创建时间”:11111111,“发件人”:{“id”:12,“姓名”:“User1”},“id”:1234,“消息”:“表单响应1”},{“创建时间”:143111111,“发件人”:{“id”:12,“姓名”:“User2”},“id”:1235,“消息”:“表单响应2”},{“计数”:2,“数据”:[{“创建时间”:11111111111111,“发件人”{“id”:12,“姓名”:“User1”},“id”:1234,“消息”:“表单响应”}{“created_time”:143111111,“from”:{“id”:12,“name”:“User2”},“id”:1235,“message”:“Form response 2”}]}}我在尝试该操作时遇到此错误。线程“main”中出现异常“com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列为BEGIN_对象。嗯,您可以尝试另一种方法吗?”。填充您的POJO数据模型并将其序列化为json,看看它是否生成了与facebook返回的结构类似的结构?json与facebook json不同——这是我最初的直觉。我很惊讶没有库可以直接解析这些评论。{“评论”:[{“计数”:2,“数据”:[{“创建时间”:11111111,“发件人”:{“id”:12,“姓名”:“User1”},“id”:1234,“消息”:“表单响应1”},{“创建时间”:143111111,“发件人”:{“id”:12,“姓名”:“User2”},“id”:1235,“消息”:“表单响应2”},{“计数”:2,“数据”:[{“创建时间”:11111111111111,“发件人”{“id”:12,“姓名”:“User1”},“id”:1234,“消息”:“表单响应”}{“created_time”:143111111,“from”:{“id”:12,“name”:“User2”},“id”:1235,“message”:“Form response 2”}]}]}@thinkingstaff修复语法后,我遇到了以下错误:线程“main”中的异常“com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行列处为BEGIN_对象2@ThinkingStuff在修复了语法之后,我遇到了这样的错误:线程“main”中出现异常com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列为BEGIN_对象