2017-04-13 7 views
-1

私はJSON RESTエンドポイント応答を持っており、その値をhotelNbrから取得したいと考えていました。どうすればいいのですか ?Gsonを使用してJSONからPOJOに変換する際の問題

{ 
    "found": [ 
    { 
     "hotelNbr": 554050442, 
     "hotelAddress": "119 Maven Lane, New Jersey", 
    } 
    ], 
    "errors": [] 
} 

私はそれを得るために以下のコードを使用していますが、それは言及した行の下での失敗:

public List<Hotel> RDS_POST_HotelDetails(String HotelName, String sUrl) throws Exception, IOException { 
      Gson gson = new GsonBuilder().setPrettyPrinting().create(); 

      // Create your http client 
      CloseableHttpClient httpclient = HttpClientBuilder.create().build(); 

      // Create http Put object 
      HttpPost ohttppost = new HttpPost(sUrl); 

      // Message Body 

      StringEntity input = new StringEntity(

        "{\"hotelNbr\":[\""+HotelName+"\" ]}" 
        ); 

      // Set content type for post 
      input.setContentType("application/json"); 

      // attach message body to request 
      ohttppost.setEntity(input); 

      // submit request and save response 
      HttpResponse response = httpclient.execute(ohttppost); 

      // Get response body (entity and parse to string 
      String sEntity = EntityUtils.toString(response.getEntity()); 

       List<Hotel> hotelobject = new ArrayList<Hotel>(); 

       // Create a type token representing the type of objects in your json response 
       // I had to use the full class path of TYPE because we also have a Type class in our project 
       java.lang.reflect.Type cType = new TypeToken<List<Hotel>>() { 
       }.getType(); 

       // Convert to Array object using gson.fromJson(<json string>, 
       // <type>) 
       hotelObject = gson.fromJson(sEntity, cType); // I am getting error here 

       String hotelNumber = hotelObject.get(0).getFound().get(0).getItemNbr().toString(); 

} 

package com.hotels.company; 

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Hotel { 

    @SerializedName("found") 
    @Expose 
    private List<Found> found = null; 
    @SerializedName("errors") 
    @Expose 
    private List<Object> errors = null; 

    public List<Found> getFound() { 
     return found; 
    } 

    public void setFound(List<Found> found) { 
     this.found = found; 
    } 

    public List<Object> getErrors() { 
     return errors; 
    } 

    public void setErrors(List<Object> errors) { 
     this.errors = errors; 
    } 

} 

以下Hotel.javaクラスを見つけてくださいFound.javaクラスを見つけてください。以下:

package com.hotels.company; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Found { 

    @SerializedName("hotelNbr") 
    @Expose 
    private Integer hotelNbr; 
    @SerializedName("hotelAddress") 
    @Expose 
    private String hotelAddress; 

    public Integer getHotelNbr() { 
     return hotelNbr; 
    } 

    public void setHotelNbr(Integer hotelNbr) { 
     this.hotelNbr = hotelNbr; 
    } 

    public String getHotelAddress() { 
     return hotelAddress; 
    } 

    public void setHotelAddress(String hotelAddress) { 
     this.hotelAddress = hotelAddress; 
    } 

} 

私はStackOverflowの質問でいくつかの例を見つけようとしましたが、私の解決策は得られませんでした。どんな助けもありがとう。

+1

エラースタックとは何ですか? –

答えて

0

あなたが解析しているJSONは十分にフォーマットされていない.. "hotelAddressは"

正しいJSONであろうと削除した後にコンマ

あり:

{ 
    "found":[ 
     { 
     "hotelNbr":554050442, 
     "hotelAddress":"119 Maven Lane, New Jersey" 
     } 
    ], 
    "errors":[ ] 
} 
0

が、私はのカップルを見つけました問題:

  1. Jsonは無効です。 "hotelAddress": "119 Maven Lane, New Jersey",の末尾にカンマがあることを確認してください。それを除く。

  2. jsonをList<Hotel>にデシリアライズしようとしていますが、上記のjsonはリストではありません。 jsonを更新するか、Listの代わりにHotelオブジェクトにデシリアライズします。

+0

JSONから、を削除しましたが、同じ問題が発生しています – puchu

関連する問題