【问题标题】:How can i filter with a key through JSONArray我如何通过 JSONArray 使用密钥进行过滤
【发布时间】:2019-03-27 21:37:40
【问题描述】:

我收到下一个错误:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
class org.json.simple.JSONArray cannot be cast to class
org.json.simple.JSONObject (org.json.simple.JSONArray and
org.json.simple.JSONObject are in unnamed module of loader 'app')

我获取 JSON 的端点是:

https://www.okex.com/api/spot/v3/instruments

我已经搜索过这个错误,我认为问题是我得到的是 JSONArray 而不是 JSONObject,但我需要按键过滤,因为我需要从 json 中获取每个“base_currency”。

以下是给我错误的原始代码:

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);
        }
       }
    }

【问题讨论】:

    标签: java json org.json


    【解决方案1】:

    而不是

    arr1 = (JSONArray) jobj1.get(Param1);
    

    arr1=job1 ;//or jsut use the same variable
    

    哦和

    jobj1 = (JSONObject) parse.parse(inline); 
    

    应该是

     jobj1 = (JSONArray) parse.parse(inline); 
    

    然后

     for( int a=0; a<arr1.size(); a++ ) {
    
          JSONOBject temp=  arr1.get(a));
          String currency= temp.get("base_currency")
     }
    

    如果你得到一个 jsonArray 而不是一个包含数组的对象,基本上在链接中

    【讨论】:

      【解决方案2】:

      如果您需要根据键获取值,您可以尝试下面的代码,它根据您的 JSON 格式进行修改。

      JSONParser parser = new JSONParser();
                  Object object = parser.parse(inline);
                  JSONArray jsonArray = (JSONArray) object;
      
                  for (int i = 0; i < jsonArray.size(); i++) {
                      JSONObject singleObject = (JSONObject) jsonArray.get(i);
                      System.out.println(singleObject.get("base_currency"));
                  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多