Изменение формата вывода списка при использовании GSON - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть ArrayList из pojo, которые я хотел бы преобразовать в JSON, в настоящее время, когда я вызываю Gson.toJson(list), возвращается строка:

[
  {
    "key1": "value1", 
    "key2": "value2",
    "key3": "value3"
  },
  {
    "key1": "value1", 
    "key2": "value2",
    "key3": "value3"
  }
]

Но я хотел бы вернуть JSON в виде списка объектов, не входящих в массив, таких как:

  {
    "key1": "value1", 
    "key2": "value2",
    "key3": "value3"
  },
  {
    "key1": "value1", 
    "key2": "value2",
    "key3": "value3"
  }

Есть ли способ достичь этого напрямую, или мне просто изменить строку вывода?

1 Ответ

0 голосов
/ 28 февраля 2020

Мой подход заключается в использовании java 8 потоков (которые, конечно, могут быть переведены в непотоковую версию):

List<Pojo> values = new ArrayList<>();
values.add(new Pojo("value1.1", "value1.2"));
values.add(new Pojo("value2.1", "value2.2"));

String desiredOutput = values
        .stream()
        .map(pojoItem -> new Gson().toJson(pojoItem))
        .collect(Collectors.joining(","));

, которая производит

{"key1":"value1.1","key2":"value1.2"},{"key1":"value2.1","key2":"value2.2"}

. код

  1. сначала перебирает ваш список (values.stream())
  2. преобразует каждый его элемент в его json -представление (.map(pojoItem -> new Gson().toJson(pojoItem)). Так что теперь у вас фактически есть список json -строк
  3. Элементы этого виртуального списка объединяются запятой и возвращаются в виде строки (.collect(Collectors.joining(",")).

Конечно, вы можете настроить его в соответствии со своими потребностями, например, чтобы не соединять запятыми, а с разрывом строки, чтобы получить JSON Формат строк .

...