Dữ liệu của bạn có vấn đề ở chỗ bạn có các đối tượng bên trong wrapper trong mảng của bạn. Có lẽ đối tượng Vendor
của bạn được thiết kế để xử lý id
, name
, company_id
, nhưng mỗi đối tượng trong số đó cũng được bao bọc trong một đối tượng có một thuộc tính duy nhất vendor
.
Tôi giả định rằng bạn đang sử dụng mô hình Jackson Data Binding.
Nếu có thì có hai điều cần xem xét:
Đầu tiên là sử dụng thuộc tính cấu hình Jackson đặc biệt. Jackson - kể từ 1.9 Tôi tin rằng, điều này có thể không khả dụng nếu bạn đang sử dụng phiên bản cũ của Jackson - cung cấp UNWRAP_ROOT_VALUE
. Nó được thiết kế cho các trường hợp kết quả của bạn được bao bọc trong một đối tượng thuộc tính đơn mức cao nhất mà bạn muốn loại bỏ.
Vì vậy, chơi xung quanh với:
objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
Thứ hai là sử dụng đối tượng bao bọc. Ngay cả sau khi loại bỏ đối tượng bao bọc bên ngoài, bạn vẫn gặp sự cố đối tượng Vendor
của bạn được bao bọc trong một đối tượng thuộc tính đơn. Sử dụng một wrapper để làm được việc này:
class VendorWrapper
{
Vendor vendor;
// gettors, settors for vendor if you need them
}
Tương tự như vậy, thay vì sử dụng UNWRAP_ROOT_VALUES
, bạn cũng có thể định nghĩa một lớp wrapper để xử lý các đối tượng bên ngoài. Giả sử rằng bạn có đúng Vendor
, VendorWrapper
đối tượng, bạn có thể định nghĩa:
class VendorsWrapper
{
List<VendorWrapper> vendors = new ArrayList<VendorWrapper>();
// gettors, settors for vendors if you need them
}
// in your deserialization code:
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readValue(jsonInput, VendorsWrapper.class);
Cây đối tượng cho VendorsWrapper là tương tự như JSON của bạn:
VendorsWrapper:
vendors:
[
VendorWrapper
vendor: Vendor,
VendorWrapper:
vendor: Vendor,
...
]
Cuối cùng, bạn có thể sử dụng Jackson Tree Model để phân tích này vào JsonNodes
, loại bỏ nút ngoài và cho mỗi JsonNode
trong số ArrayNode
, gọi:
mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);
Điều đó có thể dẫn đến ít mã hơn, nhưng có vẻ như không ít vụng về hơn là sử dụng hai trình bao bọc.
Đây là JSON không hợp lệ. 'vendor' có giá trị là một mảng, trong đó có một đối tượng duy nhất và đối tượng đơn lẻ có thuộc tính 'vendor', tiếp theo là một opject mức cao nhất. tức là đối tượng 'vendor' thứ hai không có thuộc tính liên quan trong đối tượng đơn lẻ trong mảng. Hơn nữa, tên thuộc tính không phải là chuỗi, chúng cần được trích dẫn bằng JSON. Tôi đoán rằng bạn đã nhập JSON sai? Một câu trả lời hay sẽ phụ thuộc vào việc biết JSOn bạn đang làm việc với cái gì. – pb2q
Xin lỗi, hãy để tôi chỉnh sửa JSON - Nên sửa ngay bây giờ –
Bạn không thể (hoặc không muốn) để có một lớp Nhà cung cấp có chứa Danh sách? –
hertzsprung