【问题标题】:How can I keep GSON from returning null when parsing a basic JSON object?解析基本 JSON 对象时,如何防止 GSON 返回 null?
【发布时间】:2017-08-04 23:26:56
【问题描述】:

我正在处理一个基本的 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("longitude") 没有运气。 与实例化 'gson' 相同 Gson gson=新的 Gson(); 我正在为 gson 使用 gson-2.8.1.jar。

希望我遗漏了一些明显的东西。

【问题讨论】:

    标签: java json serialization


    【解决方案1】:

    它不起作用,因为 longitudelatitude 位于 iss_position 嵌套对象中,并且解组器尝试从顶层解析字段。

    最简单的解决方法是创建一个 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;
    }
    

    【讨论】:

    • 我想我错过了什么。感谢您的帮助,对于初学者的东西感到抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多