Как преобразовать массив строк в объект с помощью GSON/JSON?

У меня есть json вот так:

[
  [
    "Passport Number",
    "NATIONALITY",
    "REASONS"
  ],
  [
    "SHAIS100",
    "INDIA",
    ""
  ],
  [
    "",
    "",
    "Agent ID is not matched."
  ],
  [
    "",
    "",
    ""
  ]
]

Я хочу заполнить это до ArrayList<String[]>, скажите, пожалуйста, как это сделать?

И пустые строки не должны преобразовываться как null.

Ответ 1

Это очень просто, вам просто нужно сделать следующее:

1.- Сначала создайте объект Gson:

Gson gson = new Gson();

2.- Получите соответствующий Type для List<String[]> (обратите внимание, что вы не можете сделать что-то вроде List<String[]>.class из-за Java type стирание):

Type type = new TypeToken<List<String[]>>() {}.getType();

3.- Наконец, разобьем JSON в структуру типа Type:

List<String[]> yourList = gson.fromJson(yourJsonString, type);

Ответ 2

Посмотрите Gson docs

Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};

(Serialization)
gson.toJson(ints);     ==> prints [1,2,3,4,5]
gson.toJson(strings);  ==> prints ["abc", "def", "ghi"]

(Deserialization)
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); 
==> ints2 will be same as ints

Это важно для вас: мы также поддерживаем многомерные массивы с произвольно сложными типами элементов

Для объектов null Gson по умолчанию не будет преобразован как null. Ссылка Но вы можете настроить сканирование этих атрибутов nulls, если вы хотите сделать это после.

Поведение по умолчанию, которое реализовано в Gson, заключается в том, что поля нулевого объекта игнорируются. Это позволяет использовать более компактный выходной формат; однако клиент должен определить значение по умолчанию для этих полей, так как формат JSON преобразуется обратно в его Java.

Здесь вы можете настроить экземпляр Gson для вывода null:

Gson gson = new GsonBuilder().serializeNulls().create();

В вашей проблеме, возможно, вам не нужно настраивать это.

Надеюсь, это поможет.