http如何从java中的JSON解析创建非静态列表?
我对Java还比较陌生,在我目前正在进行的项目中遇到了一个问题。我试图通过HTTP请求从UN Comtrade获取数据,然后将其解析为ArrayList
我已经用下面的代码实现了这一点,但接下来我想做的是在这个类中创建一个额外的“getList”方法,这样我就可以从程序的其他部分调用list
然而,我不知道该怎么做,因为parse方法是静态的,所以它创建的列表是不可访问的。有人能帮我吗
我的主要课程:
public class Main {
public static void main(String[] args) {
ReporterArea reporterArea = new ReporterArea();
reporterArea.fetchReporterArea();
}
记者区域课程:
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpClient;
import java.net.URI;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;
public class ReporterArea {
public void fetchReporterArea(){
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://comtrade.un.org/api/get?max=500&type=C&freq=A&px=HS&ps=2016&r=all&p=0&rg=2&cc=TOTAL")).build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenApply(ReporterArea::parse)
.join();
}
public static String parse(String dataset){
JSONObject countries = new JSONObject(dataset);
ArrayList<String> list = new ArrayList<String>();
JSONArray array = countries.getJSONArray("dataset");
for (int i = 0; i < array.length(); i++){
String combined = array.getJSONObject(i).optString("rtTitle") + "; " + array.getJSONObject(i).optString("rtCode");
list.add(combined);
}
for (String i : list){
System.out.println(i);
}
return null;
}
}
# 1 楼答案
如果不想更改api逻辑,只需创建一个private List myList变量,在静态方法中为列表添加元素的for块之后,编写
之后,您可以创建一个公共getter方法,如下所示:
您必须小心,并确保在解析之后调用getList()方法