Ok vì vậy tôi đã chỉnh sửa câu hỏi vì nó không đủ rõ ràng.GSON: tùy chỉnh đối tượng deserialization
Chỉnh sửa 2: đã cập nhật tệp JSON.
Tôi đang sử dụng GSON trong ứng dụng Android và tôi cần phải phân tích cú pháp các tệp JSON, xuất phát từ máy chủ và có quá phức tạp. Tôi không muốn có cấu trúc đối tượng quá nặng, vì vậy tôi muốn đơn giản hóa các nội dung: vì vậy cấu trúc của đối tượng của tôi sẽ không phải là cấu trúc của tệp JSON.
Ví dụ, nếu trong JSON Tôi có điều này:
{
"object1":{
"attribute1" : "test1",
"attribute40" : "test40",
"user":{
"id":1,
"name":"foo"
}
,"example":{
"total":10,
"list":[
{
"tag":"tag1",
"name":"object name 1",
"pos":1
},
{
"tag":"tag10",
"name":"object name 10",
"pos":10
}
]
}
}
"object2":{
"attribute1":"test..."
}
}
Tôi không muốn giữ lại trong cơ cấu của tôi hiện tại đối tượng, một đối tượng Example
, có chứa một ArrayList
và một "tổng" int
. Nhưng tôi muốn giữ chỉ một Chuỗi đơn giản với giá trị "object name 1;object name 2;..."
.
Hơn nữa, tôi chỉ muốn lưu trữ Id người dùng, không phải là Người dùng hoàn chỉnh, vì tôi đã có người dùng hoàn chỉnh được lưu trữ ở nơi khác, với một cuộc gọi API máy chủ khác.
Vì vậy, lớp lớp học của tôi sẽ là một cái gì đó như:
class Foo{
int userId;
String example; //"object name 1;object name 2;..."
...
}
Vì vậy, tôi cho rằng chúng ta có thể đạt được điều này với một deserializer tùy chỉnh, nhưng tôi không thấy như thế nào. Tôi muốn nếu có thể để giảm thiểu bộ nhớ, vì vậy tôi không nghĩ rằng có một ví dụ đối tượng đầy đủ, và sau đó sử dụng nó để xây dựng String example
của tôi là một cách chính xác.
Trong trường hợp xấu nhất, nếu nó quá phức tạp, tôi muốn có thể lưu trữ ít nhất chỉ danh sách các mục thẻ khi tôi phân tích đối tượng ví dụ: vì vậy tôi cần một trình gỡ rối tùy chỉnh để loại bỏ phần int total
.
Vì vậy, tôi sẽ có:
class Foo{
int userId;
ArrayList<Tag> example;
...
}
Theo yêu cầu đặc biệt của bạn, GSON bị quá tải. Chỉ cần chuyển chuỗi JSON của bạn vào hàm tạo của mô hình miền của bạn, sau đó sử dụng phân tách thao tác chuỗi đơn giản/trích xuất trường bắt buộc. – yorkw
Vâng, chắc chắn nó có thể là một giải pháp, nhưng tôi có rất nhiều tệp JSON với hơn 30 trường mỗi lần và cấu trúc có thể phát triển trong tương lai. Vì vậy, tôi chắc chắn sẽ thích sử dụng một lib như GSON để giảm thiểu công việc và bảo trì. Đặc biệt là nếu tôi đã sử dụng nó trên một số tệp JSON. – Chayy
"cấu trúc có thể phát triển trong tương lai", từ quan điểm OO, bạn nên tạo mô hình đối tượng miền hoàn chỉnh ngay bây giờ, mặc dù bạn không sử dụng tất cả các thuộc tính của nó. – yorkw