[英]How can I get specific data from a REST API in?
因此,我正在嘗試使用 java 代碼從 rest api 訪問數據,而我在使用 java 從 api 獲取數據方面不是很有經驗。我在另一個問題上找到了下面的代碼。 此代碼能夠 output 來自鏈接的所有數據,但我對如何從鏈接獲取特定值感到有點困惑。 下面代碼中的鏈接顯示了蘋果的營養信息,我正在尋找的是能夠 output 特定值,例如 fdcId 或描述。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) {
try {
URL url = new URL("https://api.nal.usda.gov/fdc/v1/food/1750339?api_key=DEMO_KEY");//your url i.e fetch data from .
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP Error code : "
+ conn.getResponseCode());
}
InputStreamReader in = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(in);
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (Exception e) {
System.out.println("Exception in NetClientGet:- " + e);
}
}
}
我並沒有真正嘗試過代碼。 我試着在網上尋找這個問題的答案,但沒有找到太多
您需要查看如何在 Java 中解析 Json。這樣您就可以從該 Json 文件中獲取所需的任何數據。 類似問題的一些解釋在這里。
通常是 Spring 或用於此目的的其他框架。 在您的示例中,您可以像這樣保存 JSON 對字符串的響應:
String reponse = "";
String line;
while ((line = br.readLine()) != null) {
reponse += line;
}
而不是解析這個 JSON,fe 使用 Jackson ObjectMapper 將它轉換成你的 dto。
這里有一個例子: https://www.baeldung.com/jackson-object-mapper-tutorial
你的問題應該分為兩部分:
您已經完成的第一部分。 但是到目前為止,您可以用更少的代碼來完成。 可以使用3d方HTTP客戶端。 最受歡迎的是Apache Http具有良好教程的客戶端 - Apache HttpClient 教程和OK Http具有良好教程的客戶端 - OkHttp指南。 但是,我編寫了自己的 Http 客戶端,該客戶端並不廣為人知,但使用起來非常簡單。
第二部分是如何解析 Json。為此,您還可以使用 3d 方 Json 解析器。 最受歡迎的是Json Jackson或Gson (Google 的)。 同樣,我還在 Json-Jackson 上編寫了自己的瘦包裝器,它允許您非常簡單地解析 Json。 這是使用我自己的實用程序的代碼示例:
HttpClient httpClient = new HttpClient();
try {
httpClient.setConnectionUrl("https://api.nal.usda.gov/fdc/v1/food/1750339?api_key=DEMO_KEY");
httpClient.setRequestHeader("Accept", "application/json");
String jsonResponse = httpClient.sendHttpRequest(HttpClient.HttpMethod.GET);
Map<String, Object> map = JsonUtils.readObjectFromJsonString(jsonResponse, Map.class);
System.out.println("fdcid: " + map.get("fdcId"));
System.out.println("description: " + map.get("description"));
} catch (Exception e) {
System.out.println(httpClient.getLastResponseCode() + " "
+ httpClient.getLastResponseMessage() + TextUtils.getStacktrace(e, false));
}
如果您運行此代碼,這將是 output:
fdcid: 1750339
description: Apples, red delicious, with skin, raw
HttpClient
、 JsonUtils
和TextUtils
類都是我編寫和維護的 MgntUtils 開源庫的一部分。 這是庫的Javadoc如果你想要整個庫的源代碼,你可以在這里的 Github 上獲得它,而作為 Maven 工件的庫可以從 Maven Central here獲得
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.