在解析基本JSON对象时,如何让GSON不返回null?

时间:2017-08-04 23:26:57

标签: java json serialization

我正在研究一个基本的JSON问题: 我采用JSON格式的字符串(来自http://api.open-notify.org/iss-now.json)。 我将它传递给一个方法,该方法试图将信息解析为一个名为ISSClass的类,以便我可以读取经度和纬度的字段。

当我尝试返回两个字段时,它们为空。

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使用gson-2.8.1.jar。

希望我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:1)

它不起作用,因为longitudelatitude位于iss_position嵌套对象中,而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;
}