Это просьба: 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? Но как я могу преобразовать эту строку в массив или список?
Спасибо!
Excelente, я тоже так думаю... но теперь... как я могу преобразовать эту строку в массив? извините, я знаю, что это легко, но я новичок в Java...
Я не получаю эту ошибку при запуске строки JSONArray array = new JSONArray(response);
, где response
- данные, которые вы дали. Этот код работает нормально для меня. Однако, если я добавлю строку JSONObject obj = array.getJSONObject(0);
, я получу ошибку, о которой вы сообщаете. Пожалуйста, отредактируйте свой вопрос, чтобы включить код, в котором выдается ошибка: он определенно не выдается в строке, которую вы упомянули.
ты прав!! посмотрите новый код пожалуйста!!
Согласно вашему ответу
[[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));
}
}
Большое вам спасибо!!! теперь у меня другая проблема... jejeje, иногда значения приходят с десятичными числами, а иногда нет... если я привожу к Double, а оно не приходит с десятичным числом, я не могу этого сделать... вы понимаете?
@MatiasSolana Я обновил ответ выше. Вы можете использовать instanceof, чтобы увидеть тип значения, а затем вместо печати добавить свою логику
Привет, вы просто получаете массив, JSON должен быть представлением структурированных данных, обычно у вас есть что-то вроде {значение: [массив], значение2: {название: 'другой объект'}}. в этом случае у вас просто массив массивов