Đưa ra một tài liệu, tôi muốn nhận danh sách tất cả các đường dẫn đầy đủ trong Java, chỉ dành cho các lá.
Ví dụ: có tài liệu này:
{MỘT : {
B : {
Đ: "đ"
}
C : {
E: "e",
F: "f"
}
}
Tôi muốn có được cái nàyDanh sách
:
"ABD",
"ACE",
"ACF"
Có chức năng nào trong thư viện "mongodb" để thực hiện việc này không? Làm cách nào tôi có thể viết thủ công mà không cần sử dụng đệ quy?
Tôi đã tìm ra giải pháp.
tôi sử dụng Gson
Chức năng mạnh mẽ của thư viện sẽ Tài liệu
转换为 json
, sau đó sử dụng com.google.gson.stream.JsonReader
Đọc nó.
Mã có thể tốt hơn nếu nó hiệu quả hơn, nhưng đối với nhu cầu của tôi, mã này vẫn ổn và tôi chỉ phải đọc rất ít tài liệu.
public static List leafPaths(Tài liệu tài liệu) {
Chuỗi json = gson.toJson(tài liệu);
List leafPaths = new ArrayList<>();
thử (JsonReader reader = new JsonReader(new StringReader(json))) {
//scorro tutti gli elemento dello json
while (true) {
Mã thông báo JsonToken = reader.peek();
chuyển đổi (mã thông báo) {
trường hợp BEGIN_ARRAY:
reader.beginArray();
phá vỡ;
trường hợp END_ARRAY:
reader.endArray();
phá vỡ;
trường hợp BEGIN_OBJECT:
reader.beginObject();
phá vỡ;
trường hợp END_OBJECT:
reader.endObject();
phá vỡ;
trường hợp TÊN:
reader.nextName();
phá vỡ;
trường hợp STRING:
reader.nextString();
leafPaths.add(reader.getPath());
phá vỡ;
SỐ trường hợp:
reader.nextDouble();
leafPaths.add(reader.getPath());
phá vỡ;
trường hợp BOOLEAN:
reader.nextBoolean();
leafPaths.add(reader.getPath());
phá vỡ;
trường hợp KHÔNG:
reader.nextNull();
phá vỡ;
trường hợp END_DOCUMENT:
// tutti i campi
return leafPaths.stream().map(field -> field.substring(2)).collect(toList());
default:
phá vỡ;
}
}
} catch (Exception e) {
trả về các láPath;
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!