【发布时间】:2019-05-21 22:52:29
【问题描述】:
我有一个解析为 JSON 的文件系统结构:
{
"name": "rootf",
"type": "system",
"path": "Parsing/rootf",
"children": [{
"name": "f1",
"type": "folder",
"path": "Parsing/rootf/f1",
"children": [{
"name": "subf1",
"type": "folder",
"path": "Parsing/rootf/f1/subf1",
"children": [{
"name": "text1.txt",
"type": "file",
"path": "Parsing/rootf/folder1/subf1/text1.txt",
"children": ["a", "b", "c"]
}]
}, {
"name": "subf2",
"type": "folder",
"path": "Parsing/rootf/f1/subf2",
"children": []
}, {
"name": "text2.txt",
"type": "file",
"path": "TParsing/rootf/f1/text2.txt",
"children": ["d", "e", "f"]
}]
}, {
"name": "text1.txt",
"type": "file",
"path": "Parsing/rootd/text1.txt",
"children": ["aa", "bb"]
}],
"_id": "5ce47292d866fc2f40037a56"
}
可以看出system 类型的children(表示根文件夹)和folder 类型(表示根文件夹的子文件夹)可以包含其他文件夹和/或文件。 children 类型为 file 包含文件的内容。
我稍后需要访问 folder 类型和 file 类型的单个对象。将其映射到 Java 对象的最有效方法是什么?如何单独访问它们?
我最初尝试使用 GSON 将其映射到三个类,System.java、Folder.java 和 File.java,它们分别包含 private List<Folder> children、private List<File> children 和 private List<String> children。这仅在我具有特定的 JSON 结构(RootFolder->Sub-Folder->File)时才有效。有什么方法可以使映射更通用,以便它包含System 可以包含Folder 和File 的条件,同样,Folder 可以包含Folder 和File?
【问题讨论】:
-
为什么你不能有一个
System类和List<Children>并且一个孩子可以是一个文件夹或文件,因为它有一个类型参数?如果真的要多态的话可以参考这些链接stackoverflow.com/questions/30362446/…stackoverflow.com/questions/5800433/polymorphism-with-gsonstackoverflow.com/questions/15736654/… -
@AbhijithNagarajan,您能告诉我如何从中访问单个
file和folder对象吗?实际上,对于System,我需要构建一组components对象。此components集应包含System内的文件和文件夹对象。我对如何做到这一点有点困惑。 -
你能用这个创建一个树结构吗?
-
@Hades,对不起,我不明白。我应该从什么创建树结构,为什么需要它?你能澄清一下吗?
-
一棵树将包含根文件夹作为其节点,并包含进一步的子节点作为其子节点,stackoverflow.com/questions/19330731/…。