Как я могу разобрать массив массивов JSON с помощью Retrofit?

Я вызываю binance- api, и ответ такой:

[
 [
    1528265700000,
    "606.84000000",
    "609.50000000",
    "606.84000000",
    "609.50000000",
    "399.45771000",
    1528266599999,
    "242985.40248060",
    415,
    "200.23538000",
    "121838.16910200",
    "0"
 ],
 [
    1528266600000,
    "609.50000000",
    "609.58000000",
    "606.88000000",
    "608.11000000",
    "1328.29962000",
    1528267499999,
    "807439.07315600",
    709,
    "220.23076000",
    "133950.90569850",
    "0"
]

]

у него нет объекта json. Когда я использую дооснащение, я получаю

JsonSyntaxException : Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 3 path $[0]

Как его разобрать?

Вам нужно поиграть с массивами. Это абсолютно возможно, и вы можете это сделать. нужно заглянуть в stackoverflow.com/questions/8371274/…

Pankaj Kumar 06.06.2018 12:04
2
1
993
4

Ответы 4

Модернизация предполагает, что объект json будет начинаться с { и заканчиваться }. Может быть, вы можете добавить их, если их еще нет?

Можете ли вы сохранить строку перед ее анализом? Если да, вы можете просто добавить туда токены. String result = "{" + response + "}"

Arnaud VdP 06.06.2018 12:02

В противном случае вы можете проверить ссылку это, у которой также есть решение

Arnaud VdP 06.06.2018 12:05

Используйте это что-то вроде этого и попробуйте создать свой дочерний массив для объекта, иначе вы запутаетесь, чтобы получить данные из дочернего массива, потому что вам нужно использовать этот 0,1,2,3 .... в качестве ключа.

 private void loadJson() {

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("you api url")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call = request.getJSON();
        call.enqueue(new Callback<JSONResponse>() {
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> res) {

                JSONResponse response = res.body();
                try {
                    JSONArray json = new JSONArray(""+response);
                    for (int i = 0; i < json.length(); i++) {

                        JSONArray arrayInArray = json.getJSONArray(i);

                        for (int j = 0; j < arrayInArray.length(); j++) {
                            Log.e("Here is", "" + arrayInArray.getString(j));
                        }

                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
                Log.d("Error",t.getMessage());
            }
        });
}

Сообщите мне, если это сработает для вас.

конечно работает. Я хочу сделать это с помощью дооснащения и Gson.

H.Gheisari 06.06.2018 12:12

@ H.Gheisari Я обновил свой ответ, попробуйте и дайте мне знать, работает ли

Sandeep Parish 06.06.2018 12:18

что такое JSONResponse?

H.Gheisari 06.06.2018 12:57

Это ответ, который вы получаете в json fromet, нажав url

Sandeep Parish 06.06.2018 13:03

и после этого я преобразовал его в строку

Sandeep Parish 06.06.2018 13:04

Вам нужно вручную разобрать этот json. Пожалуйста, проверьте решение ниже: -

 JSONArray jsonArray = new JSONArray(response);
    for(int i=0;i<jsonArray.length();i++){
        String value = jsonArray.get(i);
    }

Вы должны проанализировать ответ API, как показано ниже:

  String result = response.body().string();
  JSONArray jsonArray = new JSONArray(result);
  for(int i=0;i<jsonArray.length();i++){
       JSONArray jsonArrayRow = jsonArray.getJSONArray(i);
       for (int j = 0; j < jsonArrayRow.length(); j++) {
                 String data=jsonArrayRow.getString(j);
         }
  }

Надеюсь, это поможет вам ... если вам нужна помощь, вы можете попросить

Почему вы не можете получить response.bod ()?

Mahesh Vayak 06.06.2018 12:17

потому что при дооснащении невозможно получить ответный кузов.

H.Gheisari 06.06.2018 12:55

Кто вам сказал, что я уже использую retrofit 2.0. Я могу получить его, почему вы не знаете, какую версию вы используете?

Mahesh Vayak 06.06.2018 12:57

Другие вопросы по теме