2017-08-04 12 views
1

私は基本的なJSON問題に取り組んでいます: 私はJSON形式の文字列(http://api.open-notify.org/iss-now.json)を取ります。 ISSClassというクラスに情報を解析して、経度と緯度のフィールドを読み取ることができるメソッドに渡します。基本的なJSONオブジェクトを解析するときにGSONがnullを返さないようにするにはどうすればよいですか?

2つのフィールドを返そうとすると、nullになります。

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.google.gson.annotations.Expose; 
public class GetWeather 
{ 
    public String getISSInfo(String json) 
    { 
     String output=""; 
     Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
     ISSClass cond=new ISSClass(); 
     cond= gson.fromJson(json, ISSClass.class); 
     output+="The ISS is at: "+cond.toString(); 
     return output; 
    } 
    class ISSClass 
    { 
     public ISSClass(){} 

     @Expose 
     public String latitude; 
     @Expose 
     public String longitude; 

     public String toString() 
     { 
      return latitude+", "+longitude; 
     } 
     public void setLongitude(String lon) 
     { 
      longitude=lon; 
     } 
     public void setLatitude(String lat) 
     { 
      latitude=lat; 
     } 
     public String getLongitude() 
     { 
      return longitude; 
     } 
     public String getLatitude() 
     { 
      return latitude; 
     } 
    } 
} 

そして、ここではメインです:

public class GsonTester 
{ 
    public static void main(String[] args) throws Exception 
    { 
     JsonReader reader=new JsonReader(); 
     String toParse="{\"message\": \"success\", \"timestamp\": 1501887780, \"iss_position\": {\"latitude\": \"-35.5370\", \"longitude\": \"-178.7080\"}}"; 
     GetWeather weather=new GetWeather(); 
     System.out.println(weather.getISSInfo(toParse)); 
    } 
} 

ノー運と@SerializedName( "経度")を使用してみました。 'gson'をインスタンス化する場合と同じです。 Gson gson = new Gson(); 私はgson-2.8.1.jarをgsonに使用しています。

私は何かが明らかに欠けている。

答えて

1

longitudelatitudeが入れ子オブジェクトにあり、unmarshallerがトップレベルからフィールドを解決しようとしているため、機能しません。

これを解決してJsonParserを作成し、ネストされたフィールド値(iss_position)を抽出してアンマーシャリングする最も簡単な方法です。

public String getISSInfo(String json) { 
    String output = ""; 
    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 

    JsonParser parser = new JsonParser(); 
    JsonObject top = parser.parse(json).getAsJsonObject(); 
    String nested = top.get("iss_position").toString(); 
    ISSClass cond = gson.fromJson(nested, ISSClass.class); 

    output += "The ISS is at: " + cond.toString(); 
    return output; 
} 
+0

私は何か不足していると思った。助けてくれてありがとう、初心者のために申し訳ありません – Alej

関連する問題