2016-05-18 13 views
0

どのようにしてこの複合JSONを逆シリアル化できますか。 すべてのオブジェクトにアクセスして読み込みたいです。 たとえば、インデックス付けによるSelectionIdおよびAdditionalPriceInfoフィールド。私はJSONを分割するとgsonによる複合JSON逆シリアル化Java

Gson gson2 = new Gson(); 

AirJson airJson = gson2.fromJson(airFullResult3, AirJson.class); 
Itineraries itineraries = gson2.fromJson(airFullResult3, Itineraries.class); 
Result result = gson2.fromJson(airFullResult3, Result.class); 

//Having null instead SFO 
System.out.println(result.getSearchDestinationAirportCode()); 

//Having null 
System.out.println(itineraries.getAdditionalPriceInfo()); 

:私が望むすべてにアクセスするために、これまで> d51d38c9-6e51-473c-b843-f24fef632f89

{ 
    "Status": 0, 
    "Message": "", 
    "Result": { 
     "HasMore": "False", 
     "Itineraries": [ 
      { 
       "SelectionId": "d51d38c9-6e51-473c-b843-f24fef632f89", 
       "AdditionalPriceInfo": null, 
       "Trips": [ 
        { 
         "TotalTravelTime": "02:00:00" 
        } 
       ] 
      }, 
      { 
       "SelectionId": "ff44d76a-a4c8-4aff-9f9d-6db4e1f3092c", 
       "AdditionalPriceInfo": null, 
       "Trips": [ 
        { 
         "TotalTravelTime": "01:23:00" 
        } 
       ] 
      } 
     ], 
     "SearchOriginCityText": "Long Beach", 
     "SearchOriginAirportCode": "LGB", 
     "SearchDestinationCityText": "SFO", 
     "SearchDestinationAirportCode": "SFO" 
    } 
} 

私のコード - のget(0).getSelectionId()私が望む値にアクセスすることができます。

{ 
    "Itineraries": [{ 
     "SelectionId": "d51d38c9-6e51-473c-b843-f24fef632f89", 
     "AdditionalPriceInfo": null 

    }, { 
     "SelectionId": "dda40b80-d8e4-4b76-9f78-83297b52afe9", 
     "AdditionalPriceInfo": null 
    }] 

} 

成功したコードと私は値にアクセスします。

あなたを表し子オブジェクトのカップルと一つのオブジェクトを構築する必要があり
JsonParser parser = new JsonParser(); 
JsonObject rootObject = parser.parse(airFullResult).getAsJsonObject(); 
JsonElement projectElement = rootObject.get("Itineraries"); 

Type listofObject = new TypeToken<List<Itineraries>>(){}.getType(); 
List<Itineraries> itiList = gson2.fromJson(projectElement, listofObject); 

//Having d51d38c9-6e51-473c-b843-f24fef632f89 as a result 
//which is great 
System.out.println(itiList.get(0).getSelectionId()); 

私が最初に割り当てられていないJSONで同じコードを使用すると、動作しないと、エラー

+1

この構造を反映するPOJOを構築するのがよいでしょう。複雑さはここでかなり主観的です。 – rmlan

+0

POJOをビルドしました。すべてのクラスは準備ができています。私はオブジェクトの配列を呼び出すことについて混乱しています。私は結果としてnullを持っています。 – bkm

+0

コードはあなたを助けるのに私たちにとって有益かもしれないと思いませんか? – rmlan

答えて

0

としてのjava.lang.NullPointerExceptionを持ちますjson構造。次のコードが動作します! (Java 8のtestetとgson 2.6.2)

@Test 
public void test() { 
    Gson gson = new Gson(); 
    Data data = gson.fromJson(getJson(), Data.class); 

    Assert.assertNotNull(data); 
    Assert.assertNotNull(data.result); 
    Assert.assertNotNull(data.result.itineraries); 
    Assert.assertEquals(2, data.result.itineraries.length); 
    Assert.assertEquals("d51d38c9-6e51-473c-b843-f24fef632f89", data.result.itineraries[0].selectionId); 
    Assert.assertEquals("ff44d76a-a4c8-4aff-9f9d-6db4e1f3092c", data.result.itineraries[1].selectionId); 
} 

public class Data { 
    @SerializedName("Status") 
    int status; 
    @SerializedName("Message") 
    String message; 
    @SerializedName("Result") 
    Result result; 
} 

public class Result { 
    @SerializedName("HasMore") 
    String hasMore; 
    @SerializedName("Itineraries") 
    Itineraries[] itineraries; 
    @SerializedName("SearchOriginCityText") 
    String searchOriginCityText; 
    @SerializedName("SearchOriginAirportCode") 
    String searchOriginAirportCode; 
    @SerializedName("SearchDestinationCityText") 
    String searchDestinationCityText; 
    @SerializedName("SearchDestinationAirportCode") 
    String searchDestinationAirportCode; 
} 

public class Itineraries { 
    @SerializedName("SelectionId") 
    String selectionId; 
    @SerializedName("AdditionalPriceInfo") 
    String additionalPriceInfo; 
    @SerializedName("Trips") 
    Trips[] trips; 
} 

public class Trips { 
    @SerializedName("TotalTravelTime") 
    String totalTravelTime; 
} 

private String getJson() { 
    String json = ""; 
    json += "{"; 
    json += " \"Status\": 0,"; 
    json += " \"Message\": \"\","; 
    json += " \"Result\": {"; 
    json += "  \"HasMore\": \"False\","; 
    json += "  \"Itineraries\": ["; 
    json += "   {"; 
    json += "    \"SelectionId\": \"d51d38c9-6e51-473c-b843-f24fef632f89\","; 
    json += "    \"AdditionalPriceInfo\": null,"; 
    json += "    \"Trips\": ["; 
    json += "     {"; 
    json += "      \"TotalTravelTime\": \"02:00:00\""; 
    json += "     }"; 
    json += "    ]"; 
    json += "   },"; 
    json += "   {"; 
    json += "    \"SelectionId\": \"ff44d76a-a4c8-4aff-9f9d-6db4e1f3092c\","; 
    json += "    \"AdditionalPriceInfo\": null,"; 
    json += "    \"Trips\": ["; 
    json += "     {"; 
    json += "      \"TotalTravelTime\": \"01:23:00\""; 
    json += "     }"; 
    json += "    ]"; 
    json += "   }"; 
    json += "  ],"; 
    json += "  \"SearchOriginCityText\": \"Long Beach\","; 
    json += "  \"SearchOriginAirportCode\": \"LGB\","; 
    json += "  \"SearchDestinationCityText\": \"SFO\","; 
    json += "  \"SearchDestinationAirportCode\": \"SFO\""; 
    json += " }"; 
    json += "}"; 

    return json; 
} 
+0

これらのクラスはすべて既にプロジェクトにあります – bkm

+0

もしそうなら、本当の "問題"は何ですか? –

+0

私はこの行から結果を得ます。System.out.println(data.getResult()。getItineraries());しかし、私はさらに行くことはできません。例えば、私はtotalTravelTimeに達することができません。 @ Christoph-Tobias Schenke – bkm

関連する問題