#java #json #api #rest #arraylist
#java #json #API #rest #arraylist
Вопрос:
Это запрос: https://api-pub.bitfinex.com/v2/candles/trade:1h:tBTCUSD/hist?limit=2
Это ответ:
[[1607630400000,18399,18415,18450.367075,18399,279.63699634],
[1607626800000,18290.48824022,18399,18400,18255,190.53601166]]
В другом посте кто-то сказал мне, что это Json… но когда я пытаюсь это сделать:
public static void main(String[] args) throws IOException {
String url = "https://api-pub.bitfinex.com/v2/candles/trade:1h:tBTCUSD/hist?limit=2";
try {
URL urlObj = new URL(url);
HttpURLConnection conexion2 = (HttpURLConnection) urlObj.openConnection();
conexion2.setRequestProperty("Accept-Language", "UTF-8");
conexion2.setRequestMethod("GET");
conexion2.connect();
InputStreamReader in2 = new InputStreamReader(conexion2.getInputStream());
BufferedReader br2 = new BufferedReader(in2);
String output;
output = br2.readLine();
JSONArray array = new JSONArray(output);
for (int i = 0; i < array.length(); i ) {
JSONObject object = array.getJSONObject(0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
вывод:
org.json.JSONException: JSONArray[0] не является JSONObject .
Может быть, мне не нужно преобразовывать эту строку в Json? Но как я могу преобразовать эту строку в массив или список?
Спасибо!
Комментарии:
1. Привет, вы просто получаете массив, JSON должен быть представлением структурированных данных, обычно у вас есть что-то вроде {value: [array], value2: {title: ‘другой объект’}} . в этом случае у вас просто есть массив массивов
2. Excelente, я тоже так думаю … Но сейчас… как я могу преобразовать эту строку в массив? извините, я знаю, что это просто, но я новичок в Java…
3. Я не получаю эту ошибку, выполняя строку
JSONArray array = new JSONArray(response);
, в которойresponse
указаны данные, которые вы предоставили. Этот код работает нормально для меня. Однако, если я добавлю строкуJSONObject obj = array.getJSONObject(0);
, я получу сообщение об ошибке, о котором вы сообщаете. Пожалуйста, отредактируйте свой вопрос, чтобы включить код, в котором выдается ошибка: он определенно не выдается в строке, которую вы упоминаете.4. ты прав!! посмотрите новый код, пожалуйста!!
Ответ №1:
Согласно вашему ответу
[[1607630400000,18399,18415,18450.367075,18399,279.63699634],
[1607626800000,18290.48824022,18399,18400,18255,190.53601166]]
У вас нет объекта json внутри JSONArray, у вас есть другой массив json. Вот фрагмент кода, который будет работать. Вы должны получить JSONArray внутри внешнего вида, а затем получить элементы внутри внутреннего массива. Это мое понимание того, чего вы пытаетесь достичь.
String output = "[[1607630400000,18399,18415,18450.367075,18399,279.63699634], [1607626800000,18290.48824022,18399,18400,18255,190.53601166]]";
JSONArray array = new JSONArray(output);
for (int i = 0; i < array.length(); i ) {
JSONArray arr = array.getJSONArray(i);
for (int j = 0; j < arr.length(); j ) {
if( arr.get(j) instanceof Double )
System.out.println(arr.getDouble(j));
else if( arr.get(j) instanceof Long )
System.out.println(arr.getLong(j));
else if( arr.get(j) instanceof String )
System.out.println(arr.getString(j));
else
System.out.println(arr.get(j));
}
}
Комментарии:
1. Большое вам спасибо!!! теперь у меня другая проблема … jejeje несколько раз значения приходят с десятичной дробью, а иногда и нет… если я приведу значение Double, и оно не пришло с десятичным числом, я не могу этого сделать … вы понимаете?
2. @MatiasSolana Я обновил ответ выше. Вы можете использовать instanceof, чтобы увидеть тип значения, а затем вместо печати добавить свою логику