Был один улов в JSON, что содержимое было представлено как children
, если его файл или папка, поэтому я попробовал подход, при котором я заменил ключ children
JSON на file
, если у него есть коллекциястрока без любого объекта JSON, используя регулярное выражение.Как только это было сделано, мне просто понадобился один класс, т.е. папка, в моем случае, чтобы проанализировать это в JSON для java-класса.
, поэтому мой класс такой, как показано ниже.
class Folder{ //Can be either system or folder
private String name;
private String type;
private String path;
private List<Folder> children; //To contain subFolder
private List<String> file; //To contain list of files
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public List<Folder> getChildren() {
return children;
}
public void setChildren(List<Folder> children) {
this.children = children;
}
public List<String> getFile() {
return file;
}
public void setFile(List<String> file) {
this.file = file;
}
@Override
public String toString() {
return "Folder [name=" + name + ", type=" + type + ", path=" + path + "\n, children=" + children + ", file="
+ file + "]";
}
}
Код для преобразования ключа, а затем синтаксический анализэто к такому классу
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
String contents = new String(Files.readAllBytes(Paths.get("C:\\Users\\Sample.json"))); //Java 7 to read JSON into String from file
Pattern pattern = Pattern.compile("\"children\":\\s*\\[\\s*[\"a-zA-Z\",\\s*]*]",Pattern.MULTILINE); //Pattren to find list of file i.e. content
Matcher matcher = pattern.matcher(contents);
while(matcher.find()) {
String group = matcher.group();
String newGroup = matcher.group().replaceAll("\"children\"", "\"file\"");
contents = contents.replace(group, newGroup);
}
Folder folder = objectMapper.readValue(contents, Folder.class);
System.out.println(folder);
}
вывод
Folder [name=rootf, type=system, path=Parsing/rootf
, children=[Folder [name=f1, type=folder, path=Parsing/rootf/f1
, children=[Folder [name=subf1, type=folder, path=Parsing/rootf/f1/subf1
, children=[Folder [name=text1.txt, type=file, path=Parsing/rootf/folder1/subf1/text1.txt
, children=null, file=[a, b, c]]], file=null], Folder [name=subf2, type=folder, path=Parsing/rootf/f1/subf2
, children=null, file=[]], Folder [name=text2.txt, type=file, path=TParsing/rootf/f1/text2.txt
, children=null, file=[d, e, f]]], file=null], Folder [name=text1.txt, type=file, path=Parsing/rootd/text1.txt
, children=null, file=[aa, bb]]], file=null]
теперь у вас есть иерархия, т.е. система в корне с папками и файлом внутри нее.