Tôi có một đối tượng người dùng với cấu trúc này:deserializing một lĩnh vực bản đồ <String, Object> với Gson
class User {
private String id;
private String name;
private Map<String, Object> properties;
// GETTERS & SETTERS
}
Tôi có một JSON String với cấu trúc này: Phím
{
"user": {
"id:"123456789",
"name:"azerty",
"emailHash":"123456789", // not used in User class
"properties": {
"p1":1,
"p2":"test",
"p3":[1, 2, 3, 4],
"p4":{
etc...
}
}
}
}
Properties' là Chuỗi, giá trị của Thuộc tính có thể là Chuỗi, int, Mảng, boolean, Bản đồ, v.v.
Tôi cố gắng deserialize chuỗi JSON này với Gson như sau:
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonString);
JsonObject object = element.getAsJsonObject();
GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = builder.create();
User user = (User) gson.fromJson(object.get("user"), new TypeToken<User>() {}.getType());
Trường 'id' và 'name' được chèn chính xác nhưng trường 'thuộc tính' không có giá trị.
Bạn có biết tôi đang làm gì sai không? Cảm ơn trước sự giúp đỡ của bạn!
Tôi khuyên bạn nên có thuộc tính là 'JsonObject' và sau đó chuyển đổi JSON trực tiếp thành' Map '. –
Srinivas
Mã của bạn hoạt động hoàn toàn tốt với một vấn đề nhỏ: bạn dường như đã tạo ra một 'GsonBuilder' có tên' builder' nhưng sau đó sử dụng một tên 'gsonBuilder'. Nếu đó thực sự là biên dịch thì bạn có một 'GsonBuilder' khác mà bạn đã tạo trước đó và đang sử dụng nó do nhầm lẫn. Khác hơn thế ... nó deserializes tốt trên máy tính của tôi. –
'gsonBuilder' là một lỗi khi tôi viết chủ đề. Đó là 'builder' mà tôi sử dụng trong mã của mình. Tôi sẽ chỉnh sửa chủ đề của mình để sửa chữa. Trường 'properties' được chèn đúng vào thử nghiệm của bạn? Nó rất lạ nó vẫn vô ích đối với tôi ... –