Tôi muốn đọc một tài liệu YAML tới một bản đồ các đối tượng tùy chỉnh (thay vì bản đồ, mà snakeYaml làm theo mặc định). Vì vậy, đây:Phân tích cú pháp tài liệu YAML bằng một bản đồ ở gốc bằng cách sử dụng snakeYaml
19:
typeID: 2
limit: 300
20:
typeID: 8
limit: 100
sẽ được nạp vào một bản đồ mà trông như thế này:
Map<Integer, Item>
nơi Item là:
class Item {
private Integer typeId;
private Integer limit;
}
tôi không thể tìm thấy một cách để làm điều này với snakeYaml và tôi cũng không tìm thấy thư viện nào tốt hơn cho tác vụ này.
Các tài liệu chỉ có ví dụ với bản đồ/bộ sưu tập lồng vào bên trong các đối tượng khác, vì vậy mà bạn có thể làm như sau:
TypeDescription typeDescription = new TypeDescription(ClassContainingAMap.class);
typeDescription.putMapPropertyType("propertyNameOfNestedMap", Integer.class, Item.class);
Constructor constructor = new Constructor(typeDescription);
Yaml yaml = new Yaml(constructor);
/* creating an input stream (is) */
ClassContainingAMap obj = (ClassContainingAMap) yaml.load(is);
Nhưng làm thế nào để tôi đi về định dạng Map khi nó là cội rễ của tài liệu?
Wow, hỗ trợ YAML trong Java đang bị trì hoãn. Trong khi giải pháp này hoạt động, nó sẽ là một nhức đầu khi phải đối phó với các cấu trúc lồng nhau. Tôi đoán tôi sẽ chuyển đổi mọi thứ thành JSON và sử dụng Jackson để phân tích cú pháp. – Justas
Có. Phân tích cú pháp của Yaml trong java (/ scala) * là * khủng khiếp. Đến từ python, nơi nó là "miễn phí". – javadba