这个JSON的数据结构是什么?

时间:2012-09-27 21:08:16

标签: java json gson

我试图通过使用Gson将Json解析为Java,但是当我使用fromJson()时,我总是得到null。谁能为我解释这个数据结构?谢谢!

{
"d": {
    "results": [
        {
            "__metadata": {
                "uri": "https://api.datamarket.azure.com/Data.ashx/Bing/SearchWeb/v1/Web?Query='bill'gates'&$skip=0&$top=1",
                "type": "WebResult"
            },
            "ID": "9bd0942f-fe5b-44fc-8343-ef85e5b93a7e",
            "Title": "The Official Site of Bill Gates - The Gates Notes",
            "Description": "In the space between business and goverment, even a small investment can make a big impact on the lives of those in need.",
            "DisplayUrl": "www.thegatesnotes.com",
            "Url": "http://www.thegatesnotes.com/"
        },
        {
            "__metadata": {
                "uri": "https://api.datamarket.azure.com/Data.ashx/Bing/SearchWeb/v1/Web?Query='bill'gates'&$skip=1&$top=1",
                "type": "WebResult"
            },
            "ID": "fdf0d3b9-b29f-43ef-b5ba-6bb4b1b04458",
            "Title": "Bill Gates - Wikipedia, the free encyclopedia",
            "Description": "William Henry \"Bill\" Gates III (born October 28, 1955) is an American business magnate and philanthropist. Gates is the former chief executive and current chairman of ...",
            "DisplayUrl": "en.wikipedia.org/wiki/Bill_Gates",
            "Url": "http://en.wikipedia.org/wiki/Bill_Gates"
        }
    ],
    "__next": "https://api.datamarket.azure.com/Data.ashx/Bing/SearchWeb/v1/Web?Query='bill'gates'&$skip=10&$top=10"
}

}

我认为数据结构应该是这样的,但它不起作用。

public class d {
  public result[] results;
  public String __next;}

public class result {
  public information[] infolist;}

public class information {
  public  __metadata metadata;
  public String ID;
  public String Title;
  public String Description;
  public String DisplayUrl;
  public String Url;}

public class __metadata {
   public String uri;
   public String type;}

1 个答案:

答案 0 :(得分:3)

您的Information课程就是问题所在。将Information内容放入Result并从infolist中删除Result。此外,元数据的字段名称为__metadata。这不是班级名称。最后,您错过了一个将d包装为字段的类。

public class DataContainer {
    public Data d;
}

public class Data {
    public Result[] results;
    public String __next;
}

public class Result {
    public Metadata __metadata;
    public String ID;
    public String Title;
    public String Description;
    public String DisplayUrl;
    public String Url;
}

public class Metadata {
    public String uri;
    public String type;
}

你真的应该对类名使用通用约定。 Gson不会阻止您在课程中使用自己的名字。它只需要控制字段的名称。

要反序列化:

String json = ... ;
DataContainer myDataContainer = new Gson().fromJson(JSONString , DataContainer.class);
Result[] myResult = myDataContainer.d.results;

试一试,看看是否有效。

当你为Gson编写一个类结构时,你应该如何解释JSON:

  • 开头{表示一个对象,因此这将是一个新类(如果它们具有相同的字段,则为现有类)
  • "this":表示其内部对象的字段,该字段的名称必须与字符串中的文本相同。
  • 开头[表示数组,ListSetResult[] results可以很容易List<Result> results