具有 GSON 和多个元素的 java 中的 HttpRequest
HttpRequest in java with GSON and multiple elements
我正在尝试获取 Java 中 JSON HttpRequest 的“符号”。我想使用 google 的 GSON,但是,我无法达到任何值……我的对象中总是有一个空值……我知道错误是“stock.symbol”我当然需要在之前放一些“节点”……我迷路了……所以……
这里是代码:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://yahoo-finance-low-latency.p.rapidapi.com/v6/finance/quote?symbols=AAPL&lang=en®ion=CA"))
.header("x-rapidapi-key", "---")
.header("x-rapidapi-host", "***")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
try {
HttpResponse<String> reponse = null;
reponse = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.print(reponse.body());
Gson gson = new Gson();
Stock stock = gson.fromJson(reponse.body(), Stock.class);
System.out.println("******************************************************");
System.out.println(stock.symbol + stock.displayName + stock.quoteType);
System.out.println("******************************************************");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这是我的输出,您将能够以 JSON 格式看到 api 的答案:
{"quoteResponse":{"result":[{"language":"en-US","region":"CA","quoteType":"EQUITY","quoteSourceName":"Nasdaq Real Time Price","triggerable":true,"currency":"USD","firstTradeDateMilliseconds":345479400000,"priceHint":2,"postMarketChangePercent":-0.0956731,"postMarketTime":1621641596,"postMarketPrice":125.31,"postMarketChange":-0.120003,"regularMarketChange":-1.8799973,"regularMarketChangePercent":-1.4767083,"regularMarketTime":1621627203,"averageAnalystRating":"2.0 - Buy","tradeable":false,"esgPopulated":false,"marketState":"POSTPOST","regularMarketPrice":125.43,"regularMarketDayHigh":128.0,"regularMarketDayRange":"125.21 - 128.0","regularMarketDayLow":125.21,"regularMarketVolume":79152773,"regularMarketPreviousClose":127.31,"bid":125.37,"ask":125.37,"bidSize":12,"askSize":10,"fullExchangeName":"NasdaqGS","financialCurrency":"USD","regularMarketOpen":127.82,"averageDailyVolume3Month":103188411,"averageDailyVolume10Day":86685085,"fiftyTwoWeekLowChange":47.1575,"fiftyTwoWeekLowChangePercent":0.60247856,"fiftyTwoWeekRange":"78.2725 - 145.09","fiftyTwoWeekHighChange":-19.659996,"fiftyTwoWeekHighChangePercent":-0.13550209,"fiftyTwoWeekLow":78.2725,"fiftyTwoWeekHigh":145.09,"dividendDate":1620864000,"earningsTimestamp":1619627400,"earningsTimestampStart":1627469940,"earningsTimestampEnd":1627905600,"trailingAnnualDividendRate":0.82,"trailingPE":28.192854,"trailingAnnualDividendYield":0.006440971,"epsTrailingTwelveMonths":4.449,"epsForward":5.36,"epsCurrentYear":5.2,"priceEpsCurrentYear":24.121155,"sharesOutstanding":16687599616,"bookValue":4.146,"fiftyDayAverage":130.1347,"fiftyDayAverageChange":-4.7047043,"fiftyDayAverageChangePercent":-0.03615257,"twoHundredDayAverage":127.04788,"twoHundredDayAverageChange":-1.6178818,"twoHundredDayAverageChangePercent":-0.012734425,"marketCap":2093125599232,"forwardPE":23.40112,"priceToBook":30.253258,"sourceInterval":15,"exchangeDataDelayedBy":0,"exchange":"NMS","shortName":"Apple Inc.","longName":"Apple Inc.","messageBoardId":"finmb_24937","exchangeTimezoneName":"America/New_York","exchangeTimezoneShortName":"EDT","gmtOffSetMilliseconds":-14400000,"market":"us_market","displayName":"Apple","symbol":"AAPL"}],"error":null}}******************************************************
nullnullnull`
进程已完成,退出代码为 0
public class Stock {
public String symbol, displayName, quoteType;}
我们需要到达结果数组中的JSON:
Gson gson = new Gson();
JsonObject json = gson.fromJson(jsonStr, JsonObject.class)
.get("quoteResponse")
.getAsJsonObject()
.get("result")
.getAsJsonArray()
.get(0) // only one object in the array
.getAsJsonObject();
String symbol = json.get("symbol").getAsString();
String displayName = json.get("displayName").getAsString();
String quoteType = json.get("quoteType").getAsString();
Stock stock = new Stock(symbol, displayName, quoteType);
我正在尝试获取 Java 中 JSON HttpRequest 的“符号”。我想使用 google 的 GSON,但是,我无法达到任何值……我的对象中总是有一个空值……我知道错误是“stock.symbol”我当然需要在之前放一些“节点”……我迷路了……所以……
这里是代码:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://yahoo-finance-low-latency.p.rapidapi.com/v6/finance/quote?symbols=AAPL&lang=en®ion=CA"))
.header("x-rapidapi-key", "---")
.header("x-rapidapi-host", "***")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
try {
HttpResponse<String> reponse = null;
reponse = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.print(reponse.body());
Gson gson = new Gson();
Stock stock = gson.fromJson(reponse.body(), Stock.class);
System.out.println("******************************************************");
System.out.println(stock.symbol + stock.displayName + stock.quoteType);
System.out.println("******************************************************");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这是我的输出,您将能够以 JSON 格式看到 api 的答案:
{"quoteResponse":{"result":[{"language":"en-US","region":"CA","quoteType":"EQUITY","quoteSourceName":"Nasdaq Real Time Price","triggerable":true,"currency":"USD","firstTradeDateMilliseconds":345479400000,"priceHint":2,"postMarketChangePercent":-0.0956731,"postMarketTime":1621641596,"postMarketPrice":125.31,"postMarketChange":-0.120003,"regularMarketChange":-1.8799973,"regularMarketChangePercent":-1.4767083,"regularMarketTime":1621627203,"averageAnalystRating":"2.0 - Buy","tradeable":false,"esgPopulated":false,"marketState":"POSTPOST","regularMarketPrice":125.43,"regularMarketDayHigh":128.0,"regularMarketDayRange":"125.21 - 128.0","regularMarketDayLow":125.21,"regularMarketVolume":79152773,"regularMarketPreviousClose":127.31,"bid":125.37,"ask":125.37,"bidSize":12,"askSize":10,"fullExchangeName":"NasdaqGS","financialCurrency":"USD","regularMarketOpen":127.82,"averageDailyVolume3Month":103188411,"averageDailyVolume10Day":86685085,"fiftyTwoWeekLowChange":47.1575,"fiftyTwoWeekLowChangePercent":0.60247856,"fiftyTwoWeekRange":"78.2725 - 145.09","fiftyTwoWeekHighChange":-19.659996,"fiftyTwoWeekHighChangePercent":-0.13550209,"fiftyTwoWeekLow":78.2725,"fiftyTwoWeekHigh":145.09,"dividendDate":1620864000,"earningsTimestamp":1619627400,"earningsTimestampStart":1627469940,"earningsTimestampEnd":1627905600,"trailingAnnualDividendRate":0.82,"trailingPE":28.192854,"trailingAnnualDividendYield":0.006440971,"epsTrailingTwelveMonths":4.449,"epsForward":5.36,"epsCurrentYear":5.2,"priceEpsCurrentYear":24.121155,"sharesOutstanding":16687599616,"bookValue":4.146,"fiftyDayAverage":130.1347,"fiftyDayAverageChange":-4.7047043,"fiftyDayAverageChangePercent":-0.03615257,"twoHundredDayAverage":127.04788,"twoHundredDayAverageChange":-1.6178818,"twoHundredDayAverageChangePercent":-0.012734425,"marketCap":2093125599232,"forwardPE":23.40112,"priceToBook":30.253258,"sourceInterval":15,"exchangeDataDelayedBy":0,"exchange":"NMS","shortName":"Apple Inc.","longName":"Apple Inc.","messageBoardId":"finmb_24937","exchangeTimezoneName":"America/New_York","exchangeTimezoneShortName":"EDT","gmtOffSetMilliseconds":-14400000,"market":"us_market","displayName":"Apple","symbol":"AAPL"}],"error":null}}******************************************************
nullnullnull`
进程已完成,退出代码为 0
public class Stock {
public String symbol, displayName, quoteType;}
我们需要到达结果数组中的JSON:
Gson gson = new Gson();
JsonObject json = gson.fromJson(jsonStr, JsonObject.class)
.get("quoteResponse")
.getAsJsonObject()
.get("result")
.getAsJsonArray()
.get(0) // only one object in the array
.getAsJsonObject();
String symbol = json.get("symbol").getAsString();
String displayName = json.get("displayName").getAsString();
String quoteType = json.get("quoteType").getAsString();
Stock stock = new Stock(symbol, displayName, quoteType);