我遇到下一个错误:
线程“ 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);
}
}
}
只需使用正确的代码进行编辑,另一个就可以了。抱歉
答案 0 :(得分:1)
尝试为此使用gson库(包com.google.gson)。使用以下语法
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.create().fromJson(yourJosnArray, yourObject.class)
如果您有任何date属性,则必须使用
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");
}
}
答案 1 :(得分:0)
发布完整程序,这样您就不会错过任何导入。我执行了这个程序并得到了结果。还添加了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);
}
}
}
}