我得到了下一个错误:
线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:类org.json.simple.JSONArray无法强制转换为类org.json.simple.JSONObject(org.json.simple.JSONArray和org.json.simple) .JSONObject在加载器'app'的未命名模块中)
我获得JSON的端点是:
https://www.okex.com/api/spot/v3/instruments
我已经搜索了错误,我认为问题是我得到的是JSONArray而不是JSONObject,但是我需要按键过滤,因为我需要从json获取每个“base_currency”,所以我需要JSONObject来过滤掉那个键因为它只能通过索引进行筛选,所以无法使用JSONArray。但我不知道怎么做
下面是给我错误的原始代码:
private String UrlBase = "https://www.okex.com/";
private URL url;
private String inline="";
private JSONObject jobj;
private JSONObject jobj1;
private Scanner sc;
private String Symbols = "api/spot/v3/instruments";
private String Param1= "base_currency";
private JSONArray arr;
private JSONArray arr1;
private JSONParser prs;
private HttpURLConnection conn;
private ArrayList Monedas = new ArrayList();
private Conexion conc = new Conexion();
public void CargarMonedasNuevasOkex() throws IOException {
try {
url = new URL(UrlBase+Symbols);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
conn = (HttpURLConnection)url.openConnection();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
conn.setRequestMethod("GET");
conn.connect();
int responsecode = conn.getResponseCode();
if(responsecode != 200) {
throw new RuntimeException("HttpResponseCode: " +responsecode);
}
else{
sc = new Scanner(url.openStream());
while(sc.hasNext())
{
inline+= sc.nextLine();
}
sc.close();
JSONParser parse = new JSONParser();
try {
jobj1 = (JSONObject) parse.parse(inline);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
arr1 = (JSONArray) jobj1.get(Param1);
System.out.println(arr.get(0));
for( int a=0; a<arr1.size(); a++ ) {
jobj1 = (JSONObject) arr1.get(a);
}
}
}
刚用正确的代码编辑,另一个很好。抱歉
尝试使用gson库(包com.google.gson)。使用以下语法
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.create().fromJson(yourJosnArray, yourObject.class)
如果您有任何日期属性,您必须使用
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
return TimeService.parseDate(date,"yyyy-MM-dd'T'HH:mm:ss");
}
}
发布完整的程序,这样您就不会错过任何导入。我执行了这个程序并得到了结果。还添加了json-simple依赖项。
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class Example {
private String UrlBase = "https://api.binance.com/";
private URL url;
private String inline = "";
private JSONObject jobj;
private Scanner sc;
private String Symbols = "api/v1/exchangeInfo";
private JSONObject jbj1;
private JSONArray arr;
private HttpURLConnection conn;
public void CargarMonedasNuevasBinance() throws IOException {
String Param1 = "symbols";
String Param2 = "baseAsset";
try {
url = new URL(UrlBase + Symbols);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
try {
conn = (HttpURLConnection) url.openConnection();
} catch (Exception e1) {
e1.printStackTrace();
}
conn.setRequestMethod("GET");
conn.connect();
int responsecode = conn.getResponseCode();
if (responsecode != 200) {
throw new RuntimeException("HttpResponseCode: " + responsecode);
} else {
sc = new Scanner(url.openStream());
while (sc.hasNext()) {
inline += sc.nextLine();
}
sc.close();
JSONParser parse = new JSONParser();
try {
jobj = (JSONObject) parse.parse(inline);
System.out.println(jobj.toString());
org.json.JSONObject jsonObj = new org.json.JSONObject(jobj.toString());
System.out.println(jsonObj.toString());
} catch (ParseException e) {
e.printStackTrace();
}
arr = (JSONArray) jobj.get(Param1);
for (int a = 0; a < arr.size(); a++) {
jbj1 = (JSONObject) arr.get(a);
}
}
}
}