Снимите дополнительные скобки с Gson и Volley - PullRequest
0 голосов
/ 04 января 2019

Я делаю небольшое приложение, чтобы проверить, можно ли брать в аренду ноутбуки в моем университете, и я следовал большинству учебных пособий, таких как this и this .

К сожалению, веб-страница, с которой я пытаюсь получить данные (которую я не могу отредактировать) дает мне данные с дополнительными скобками , как это, и не работает по умолчанию с Gson . (чистый текстовый трафик).

[
  [
    {
      "z36_rec_key": "000043057000060",
      "z36_id": "16356332    ",
      "z36_due_date": 20171221,
      "z36_due_hour": 1159,
      "status": "Unavailable"
    },
    {
      "z36_rec_key": "none",
      "z36_id": "none",
      "z36_due_date": 0,
      "z36_due_hour": 0,
      "status": "Available"
    }
  ]
]

Есть ли способ убрать первую пару скобок при использовании Volley и Gson? Если нет, какой обходной путь я могу сделать? Спасибо.

Кстати, это моя модель.

import com.google.gson.annotations.SerializedName;

public class Laptop {
    @SerializedName("z36_rec_key")
    public String barcode;

    @SerializedName("status")
    public String status;

    @SerializedName("z36_due_date")
    public int due_date;

    public Notebook() {
    }
}

Обновление : Я пошел с предложением Джасванта Сингха и просто добавил JSONArray в свою функцию запроса.

jsonArray = new JSONArray(response);
posts = Arrays.asList(mGson.fromJson(jsonArray.get(0).toString(), ItemObject[].class));

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Это также можно десериализовать как массив, содержащий один массив, например:

Laptop[][] laptops = new Gson().fromJson(getPackageResourceReader(YOUR_JSON),
                                             Laptop[][].class);

и вы можете получить результаты в этом случае, например, например:

Laptop lt1 = laptops[0][0];
Laptop lt2 = laptops[0][1];
0 голосов
/ 04 января 2019

Эта скобка представляет массив json

Вы можете удалить эти скобки со стороны сервера, просто отправив 0-й элемент окончательного ответа.

Или, если у вас нет доступа к этому, просто зайдите на 0-й элемент (объект) со стороны клиента (приложение или веб-сайт), и это будет работать нормально.

При использовании POJO

object.get(0) 

При использовании массива json

jsonArray.get(0)

Я рекомендую вам просто использовать JSONArray для анализа вашего ответа. Получите ответ в виде строки и:

JSONArray jsonArray = new JSONArray(response);
...