java - 尝试将 JSONArray 转换为 JSONObject
问题描述
我收到下一个错误:
线程“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");
}
}
推荐阅读
- java - 如何为 SMMRY API 解析这个 JSON 输出?
- android - 生成APK时,显示build failed,这是错误信息
- python - 使用排序和大小命令编辑代码以在 excel 电子表格中获得所需的大小
- android - Gradle 永远下载“builder-3.1.2.jar”
- python - Python - Tkinter 我的条目未显示
- sql-server - Microsoft BCP 用户名和密码在线加密?
- jquery - 带有ajax调用的jsf通过轮询获取动态值
- java - Java 线程 join() 方法
- c++ - 接收 SIGINT 动作时体面地关闭多线程 C++ 应用程序
- hive - 如何仅在 Hive 中选择具有更高价值的行