首页 > 解决方案 > 尝试将 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);
        }
   }

}

刚刚用正确的代码编辑,另一个很好。对不起

标签: javaarraysjsonclasscastexception

解决方案


尝试为此使用 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");

    }
}

推荐阅读