java - 当元素可以是不同类型以供使用时,如何创建 JSON 数据结构

标签 java gson

在此question我们看到子元素元素可以是附加数据项的数组或 boolean 值

我使用 Java 创建数据,存储在 Data 类中,然后使用 Google Gson 转换为 Json。但是因为 child 可以是两个不同的东西,所以我通过在数据中使用变量 kids 来表示这一点,当我需要存储为 boolean 值时,我会使用该变量。然后对生成的 json 进行字符串替换,将其转换为子元素。

但是这个黑客不是很令人满意并且有问题(即,如果他们有内容为“ child ”的真实数据),那么用不同的数据类型表示数据的正确方法是什么。

public class Data
{
    private String id;
    private String text;
    private String icon;
    private State  state;
    private boolean kids;

    private List<Data> children = null;

    public String getId()
    {
        return id;
    }

    public void setId(String id)
    {
        this.id = id;
    }

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text = text;
    }

    public String getIcon()
    {
        return icon;
    }

    public void setIcon(String icon)
    {
        this.icon = icon;
    }

    public List<Data> getChildren()
    {
        return children;
    }

    public void setChildren(List<Data> children)
    {
        this.children = children;
    }

    public State getState()
    {
        return state;
    }

    public void setState(State state)
    {
        this.state = state;
    }

    public boolean getKids()
    {
        return kids;
    }

    public void setKids(boolean kids)
    {
        this.kids = kids;
    }
}

public static String createFolderJsonData()
{
  CreateFolderTree cft = new CreateFolderTree(null);
  String treeData = cft.start(1).replace("kids", "children");
  return treeData;
}

最佳答案

假设你知道 child 是什么类型,你可以这样解决

public class Data<T>{

    private T children = null;

    public T getChildren(){
        return children;
    }

    public void setChildren(T children){
        this.children = children;
    }
}

public class DataRunner {
    public static void main(String[] args){
        Data<List<Data>> data = new Data<>();

        Data<List<Data>> subDataOne = new Data<>();
        subDataOne.setChildren(new ArrayList<>());

        Data<Boolean> subDataTwo = new Data<>();
        subDataTwo.setChildren(true);

        List<Data> listData = new ArrayList<>();

        listData.add(subDataOne);
        listData.add(subDataTwo);

        data.setChildren(listData);

        // {"children":[{"children":[]},{"children":true}]}
        System.out.println(new Gson().toJson(data));
    }
}

现在它打印了正确的内容,请注意 ArrayList 并不关心 Data 具有什么泛型类型

关于java - 当元素可以是不同类型以供使用时,如何创建 JSON 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541440/

相关文章:

java - 将字段解析为对象或数组时出错

java - 如何在kotlin中获取多维原始数组类?

java - 将 HashMap 的 ArrayList 转换为 GSON JsonArray

java - fragment 布局组件为空

java - JSoup.connect 某些请求出现 403 错误

java - 我如何在手机 View 中为侧边栏菜单使用动画?

java - 在 gson 中反序列化混合 json 字符串有什么想法吗?

java - 程序是在调用的方法完成后终止,还是将控制权返回给调用函数?

java - 输入流到 int 数组

android - 致命异常 : c. a.c.u java.lang.IllegalStateException:预期为 int,但在第 1 行第 83 列为 BOOLEAN