我正在try 创建一个Java类,它将包含来自JSON的响应,如下所示:

{
    "Global Quote": {
        "01. symbol": "IBM",
        "02. open": "160.0000",
        "03. high": "162.0400",
        "04. low": "160.0000",
        "05. price": "161.9600",
        "06. volume": "4561342",
        "07. latest trading day": "2023-12-08",
        "08. previous close": "160.2200",
        "09. change": "1.7400",
        "10. change percent": "1.0860%"
    }
}

到目前为止,我已经try 使用了两个单独的类,其中一个具有许多字符串和双对象,我最近使用了以下内容:

class VantageResponse { public Map<String, Object> globalQuote; }

我一直在使用Google的GSON.FromJson将响应解析为VantageResponse类的对象,但它总是返回空.我做错了什么?

推荐答案

看起来您是在正确的道路上,但是您的VantageResponse类的 struct 可能有问题.以下是一个应该可以工作的修改版本:

import com.google.gson.annotations.SerializedName;

import java.util.Map;

public class VantageResponse {
    @SerializedName("Global Quote")
    private GlobalQuote globalQuote;

    public GlobalQuote getGlobalQuote() {
        return globalQuote;
    }

    public void setGlobalQuote(GlobalQuote globalQuote) {
        this.globalQuote = globalQuote;
    }

    public static class GlobalQuote {

        @SerializedName("01. symbol")
        private String symbol;
        @SerializedName("02. open")
        private double open;
        @SerializedName("03. high")
        private double high;
        @SerializedName("04. low")
        private double low;
        @SerializedName("05. price")
        private double price;
        @SerializedName("06. volume")
        private long volume;
        @SerializedName("07. latest trading day")
        private String latestTradingDay;
        @SerializedName("08. previous close")
        private double previousClose;
        @SerializedName("09. change")
        private double change;
        @SerializedName("10. change percent")
        private String changePercent;

        // Getters and setters for all the fields

        // You can generate these using your IDE or write them manually
        // For simplicity, I'm showing just one getter here

        public String getSymbol() {
            return symbol;
        }

        public double getOpen() {
            return open;
        }

        public void setSymbol(String symbol) {
            this.symbol = symbol;
        }
    }
}

使用此 struct ,您可以使用gson来反序列化JSON响应:

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        String jsonResponse = "{ \"Global Quote\": { \"01. symbol\": \"IBM\", \"02. open\": \"160.0000\", \"03. high\": \"162.0400\", \"04. low\": \"160.0000\", \"05. price\": \"161.9600\", \"06. volume\": \"4561342\", \"07. latest trading day\": \"2023-12-08\", \"08. previous close\": \"160.2200\", \"09. change\": \"1.7400\", \"10. change percent\": \"1.0860%\" } }";

        Gson gson = new Gson();
        VantageResponse vantageResponse = gson.fromJson(jsonResponse, VantageResponse.class);

        if (vantageResponse != null && vantageResponse.getGlobalQuote() != null) {
            System.out.println("Symbol: " + vantageResponse.getGlobalQuote().getSymbol());
            System.out.println("Open: " + vantageResponse.getGlobalQuote().getOpen());
            // Add more fields as needed
        } else {
            System.out.println("Failed to parse JSON response");
        }
    }
}

Java相关问答推荐

Oracle DUAL表上使用DDL时jOOQ问题的解析'

如何在SystemiccationRetryListenerSupport中获得类级别的spring retryable annotation中指定的标签?

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

使用动态ID从json获取详细信息的Jolt规范

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

与Spring Boot相关的实体未正确保存

更新AWS凭据

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

如何在列表(链表)中插入一个新 node (作为prelast)

无法使用Open WebStart Java 8运行jnlp

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

Kotlin-仅替换字符串中最后一个给定的字符串

Java递归泛型是否可以被视为继承和重写的语法糖

JOOQ:批处理CRUD操作使用动态表定义,如何?

由于可为null,无法在kotlin中实现java接口

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值

java构造函数中的冻结操作何时发生?

Spring Integration SFTP 连接失败 - 无法协商 kex 算法的密钥交换

更新不可变的深层嵌套字段