在此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/