Получить JSON без ключа, используя gson java - PullRequest
1 голос
/ 08 января 2020
import java.util.List;
import com.google.gson.annotations.Expose;
public class TabCompRec {
    @Expose private List<TabDataCell> cells;

    public List<TabDataCell> getCells() {
        return cells;
    }

    public void setCells(List<TabDataCell> cells) {
        this.cells = cells;
    }
}

import com.google.gson.annotations.Expose;
public class TabDataCell {
    @Expose private String cellValue;

    public String getCellValue() {
        return cellValue;
    }

    public void setCellValue(String cellValue) {
        this.cellValue = cellValue;
    }
}

import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class TabMain {
    public static void main(String[] args) {
        TabDataCell tdc1 = new TabDataCell("123");
        TabDataCell tdc2 = new TabDataCell("456");

        TabCompRec tcr = new TabCompRec();
        tcr.setCells(Arrays.asList(tdc1, tdc2));

        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
        System.out.println(gson.toJson(tcr));
    }
}

Вывод получен для вышеуказанного кода:

{"cell": [{"cellValue": "123"}, {"cellValue": "456"}]}

Но я хочу json, как показано ниже, без изменения структуры объекта домена. Я получил обходной код, который выполняет итерацию выше json и конвертирует, как показано ниже. Но я хотел бы знать, какие утилиты gson доступны для вывода, например:

{"cell": ["123", "456"]}

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вы можете реализовать пользовательский сериализатор, реализующий интерфейс com.google.gson.JsonSerializer:

class TabDataCellJsonSerializer implements JsonSerializer<TabDataCell> {
    @Override
    public JsonElement serialize(TabDataCell src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.getCellValue());
    }
}

Вы можете зарегистрировать его, как показано ниже:

Gson gson = new GsonBuilder()
        .registerTypeAdapter(TabDataCell.class, new TabDataCellJsonSerializer())
        .create();
0 голосов
/ 08 января 2020

Сделать ячейки списком String вместо списка TabDataCell

import java.util.List;
import com.google.gson.annotations.Expose;
public class TabCompRec {
    @Expose private List<String> cells;

    public List<String> getCells() {
        return cells;
    }

    public void setCells(List<String> cells) {
        this.cells = cells;
    }
}

import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class TabMain {
    public static void main(String[] args) {
        TabCompRec tcr = new TabCompRec();
        tcr.setCells(Arrays.asList("123", "456"));

        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
        System.out.println(gson.toJson(tcr));
    }
}

Это должно дать вам правильный результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...