Tôi đang sử dụng Gson
để tuần tự hóa/deserialize đối tượng java thành json. Tôi muốn hiển thị nó trong UI
và cần lược đồ để mô tả tốt hơn. Điều này sẽ cho phép tôi chỉnh sửa đối tượng và thêm nhiều dữ liệu hơn thực tế.
Có thể Gson
cung cấp lược đồ json không?
Có khung nào khác có khả năng đó không?Tạo lược đồ JSON từ lớp Java
Trả lời
Thư viện Gson có thể không chứa bất kỳ tính năng nào giống như vậy nhưng bạn có thể cố gắng giải quyết sự cố của mình với thư viện Jackson và mô-đun jackson-module-jsonSchema. Ví dụ, đối với các lớp học dưới đây:
class Entity {
private Long id;
private List<Profile> profiles;
// getters/setters
}
class Profile {
private String name;
private String value;
// getters/setters
}
chương trình này:
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;
public class JacksonProgram {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
mapper.acceptJsonFormatVisitor(Entity.class, visitor);
JsonSchema schema = visitor.finalSchema();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema));
}
}
Prints dưới schema:
{
"type" : "object",
"properties" : {
"id" : {
"type" : "integer"
},
"profiles" : {
"type" : "array",
"items" : {
"type" : "object",
"properties" : {
"name" : {
"type" : "string"
},
"value" : {
"type" : "string"
}
}
}
}
}
}
Bạn có 2 phím "loại" trong đối tượng "id"! Nó có đúng không? Bạn có thể giải thích dùm không? Cảm ơn – thermz
Tôi không chắc chắn lý do tại sao chúng tôi có hai loại này. Tôi phải kiểm tra. Bạn có đầu ra tương tự trong trường hợp này không? Tại sao bạn cập nhật câu trả lời của tôi? Tôi đặt lược đồ mà tôi nhận được từ 'SchemaFactoryWrapper'. –
Sau đó, đó là một sai lầm rất lớn !: tiêu chuẩn Lược đồ JSON chỉ định rằng một thuộc tính duy nhất có thể có ** nhiều ** loại, nhưng không theo cách này! Đó là đúng: * "type": ["number", "integer"] *. Có 2 khóa trong cùng một JSON chống lại mọi tiêu chuẩn! Các phím là duy nhất. Để biết thêm thông tin: http://www.jsonschema.net/ – thermz
Có xem xét dự án JSONschema4-mapper. Với thiết lập như sau:
SchemaMapper schemaMapper = new SchemaMapper();
JSONObject jsonObject = schemaMapper.toJsonSchema4(Entity.class, true);
System.out.println(jsonObject.toString(4));
bạn nhận được sau schema JSON cho các lớp học nêu tại Michal Ziober của answer to this question:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"additionalProperties": false,
"type": "object",
"definitions": {
"Profile": {
"additionalProperties": false,
"type": "object",
"properties": {
"name": {"type": "string"},
"value": {"type": "string"}
}
},
"long": {
"maximum": 9223372036854775807,
"type": "integer",
"minimum": -9223372036854775808
}
},
"properties": {
"profiles": {
"type": "array",
"items": {"$ref": "#/definitions/Profile"}
},
"id": {"$ref": "#/definitions/long"}
}
}
Thư viện tuyệt vời, chỉ muốn tôi sẽ làm việc với JDK 7 và không phải 8 làm đường cơ sở. Sẽ ghi nhớ điều này nếu chúng ta chuyển sang JDK8. – Joe
- 1. Tạo lược đồ Json từ lược đồ XML (XSD)
- 2. Tạo Lược đồ XML từ lớp Java (hoặc đối diện)
- 3. JSON có lược đồ
- 4. Tạo các lớp jaxb từ lược đồ
- 5. Có một công cụ để tạo một lược đồ JSON từ một lược đồ XML thông qua Java không?
- 6. Xác thực lược đồ JSON bằng cách sử dụng java
- 7. Lược đồ XML cho các lớp Java với XJC
- 8. Làm cách nào để phân tích một lược đồ JSON và tạo một đối tượng json mặc định hoặc tạo một lớp java?
- 9. Cách tạo các lớp được tạo có chứa Javadoc từ tài liệu Lược đồ XML
- 10. Mở rộng tệp lược đồ Json
- 11. Sử dụng RegEx trong Lược đồ JSON
- 12. Xác thực lược đồ JSON với PHP
- 13. Tạo thể hiện XML từ lược đồ XML (xsd)
- 14. Trình tạo mã XML lược đồ C++
- 15. Làm thế nào để tạo một lược đồ XSD từ một lớp?
- 16. Sử dụng XSD.exe để tạo các lớp C# từ nhiều lược đồ XSD
- 17. Tạo hibernate hbm xml tệp & các lớp thực thể từ lược đồ DB hiện tại
- 18. tiện ích để tạo xsd từ lớp java
- 19. công cụ java nhanh nhất để tạo màn hình CRUD từ lược đồ DB là gì?
- 20. Tạo các lược đồ màu từ một hình ảnh
- 21. Tạo GUI từ một lược đồ XML tự động
- 22. tạo lược đồ activerecord từ một bảng hiện có
- 23. Tạo các lớp c mục tiêu từ sơ đồ XSD như JaxB trong Java?
- 24. Sử dụng JSON.NET để tạo lược đồ JSON với các thuộc tính phụ
- 25. Lược đồ XML cho các lớp C++
- 26. Công cụ để mô tả lược đồ JSON
- 27. Xác thực lược đồ JSON với các khóa tùy ý
- 28. Tạo sơ đồ lớp từ nguồn C++?
- 29. Cách lấy tên lược đồ từ đối tượng lược đồ trong Tridion?
- 30. Tạo các lớp Java từ các tệp .XSD ...?
Những gì bạn muốn hiển thị trong giao diện người dùng? Tôi thực sự không hiểu vấn đề là gì. 'gson' có thể chuyển đổi các lớp Java thành định dạng JSON, đó là những gì' gson' làm. – user1983983