3

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;}
4

1 に答える 1

3

あなたのInformationクラスが問題です。Informationに物を入れてからResult取り出します。また、メタデータのフィールド名は. これはクラス名ではありません。最後に、フィールドとしてラップするクラスがありません。infolistResult__metadatad

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 をどのように解釈する必要があるかを次に示します。

  • 開口部{はオブジェクトを示すため、これは新しいクラスになります (または、同じフィールドがある場合は既存のクラスになります)。
  • A"this":はそれが含まれるオブジェクトのフィールドを示し、フィールドには文字列内のテキストと同じ名前を付ける必要があります。
  • 開始点[は、配列、List、またはSet(Result[] resultsと同じくらい簡単にList<Result> results)を示します。
于 2012-09-27T21:12:40.343 に答える