Извлеките JSONArray из JSONObject, который не содержит двойных кавычек - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу извлечь JSONArray из JSONObject, который не содержит двойных кавычек.

Сущность ответа HTTP следующим образом.

{"asks":[["107.47649000",25.3039]],"bids":[["107.06385000",64.9317]],"isFrozen":"0","seq":298458396}

В частности, мне нужно извлечьи 107.4764900 и 25.3039.Однако значение 25.3039 не содержит двойных кавычек.

мои коды ниже

    public static void bid_ask () throws ClientProtocolException, IOException {
    String queryArgs = "https://poloniex.com/public?command=returnOrderBook&currencyPair=USDT_ETH&depth=1";
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost post = new HttpPost(queryArgs);
    CloseableHttpResponse response = httpClient.execute(post);
    HttpEntity responseEntity = response.getEntity();
    System.out.println("Poloniex ETHUSDT");
    //System.out.println(response.getStatusLine());


    if (responseEntity != null) {
        try (InputStream stream = responseEntity.getContent()) {
             BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
             String line;

             while ((line = reader.readLine()) != null) {
                System.out.println(line);

                JSONObject jsonObj = new JSONObject(line);
                JSONArray tokenListBid = jsonObj.getJSONArray("bids");
                JSONArray tokenListAsk = jsonObj.getJSONArray("asks");
                JSONArray bid_element;
                JSONArray ask_element;
                double bid[] = new double[2];
                double ask[] = new double[2];

               System.out.println("Poloniex Bid");
                if (tokenListBid != null) { 
                   for (int i=0;i<2;i++){
                      bid_element = tokenListBid.getJSONArray(i);
                      bid[i]=bid_element.getBigDecimal(i).doubleValue();
                      System.out.println(bid[i]);
                   } 
                }


             } //end while()
        }
    }

результат выглядит следующим образом

Предложение Poloniex 107.06385

Исключение в потоке "main" org.json.JSONException: JSONArray [1] не найден.

спасибо.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Обрабатывать внутренний массив как массив объектов и при необходимости их типизировать.
Вот упрощенный пример синтаксического анализа части «asks»

JSONObject jsonObj = new JSONObject(line);
JSONArray asks = jsonObj.getJSONArray("asks").getJSONArray(0);
Double ask = 0.0;
for (Object o : asks) {
    if (o instanceof String){
        ask = Double.valueOf((String)o);
    } else {
        ask = (Double)o;
    }
    //do something with ask
}

Обновление
Вот еще один способ доступа к данным

JSONObject jsonObj = new JSONObject(line);
SONArray asks = jsonObj.getJSONArray("asks").getJSONArray(0);

Double price = Double.valueOf(asks.getString(0));
Double qty = Double.valueOf(asks.getDouble(1));

System.out.printf("Ask price: %.6f, quantity %.4f", price, qty);

Это строка, которую я использовал для проверки своего кода

String json = "{\"asks\":[[\"107.47649000\",25.3039]],\"bids\":[[\"107.06385000\",64.9317]],\"isFrozen\":\"0\",\"seq\":298458396}";

, и вот результат, который я получил

Запросить цену: 107,476490, количество 25,3039

0 голосов
/ 22 декабря 2018

[["107.06385000",64.9317]] - массив 1*2, tokenListBid ссылается на него.Поэтому вы не можете использовать tokenListBid.getJSONArray(1); для индексации.

...