Gson
を使用して、javaオブジェクトをjsonにシリアル化/逆シリアル化しています。私はそれをUI
に表示したいと考えており、より良い説明をするためにはスキーマが必要です。これにより、オブジェクトを編集し、実際に存在するよりも多くのデータを追加することができます。
Gson
はjsonスキーマを提供できますか?
他のフレームワークにはその機能がありますか?JavaクラスからJSONスキーマを作成する
答えて
Gsonライブラリにはこのような機能は含まれていない可能性がありますが、Jacksonライブラリとjackson-module-jsonSchemaモジュールで問題を解決できます。例えば、以下のクラスのために:
class Entity {
private Long id;
private List<Profile> profiles;
// getters/setters
}
class Profile {
private String name;
private String value;
// getters/setters
}
このプログラム:スキーマ以下
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));
}
}
プリント:
{
"type" : "object",
"properties" : {
"id" : {
"type" : "integer"
},
"profiles" : {
"type" : "array",
"items" : {
"type" : "object",
"properties" : {
"name" : {
"type" : "string"
},
"value" : {
"type" : "string"
}
}
}
}
}
}
"id"オブジェクトに2つの "タイプ"キーがあります!それが正しいか?説明していただけますか?ありがとう – thermz
私はなぜこれら2つのタイプがあるのか分かりません。私は確認する必要があります。この場合も同様の出力がありますか?なぜ私の答えを更新したのですか?私は 'SchemaFactoryWrapper'から受け取ったスキーマを置いています。 –
それは巨大な間違いです!JSON Schema標準では、単一のプロパティに**複数の**タイプを持たせることができますが、このようにはできません。それは正しいものです:* "type":["number"、 "integer"] *。 同じJSONに2つのキーがあることは、すべての標準に違反しています!キーはユニークです。詳細については、http://www.jsonschema.net/ – thermz
JSONschema4-mapperプロジェクトを見てください。以下の設定で:
SchemaMapper schemaMapper = new SchemaMapper();
JSONObject jsonObject = schemaMapper.toJsonSchema4(Entity.class, true);
System.out.println(jsonObject.toString(4));
あなたはミハルZioberのanswer to this questionで述べたクラスのためにJSONスキーマを以下の取得:
{
"$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"}
}
}
素晴らしいライブラリです.JDK 7では動作し、ベースラインとしては8ではないことを願っています。私たちがJDK8に移行したなら、これを覚えておいてください。 – Joe
- 1. C#クラスからJSONスキーマを生成する
- 2. JSON Javaからの作成
- 3. Javaのsqlスキーマからormマッピング・クラスを生成する方法
- 4. JSONからJavaクラス
- 5. jsonからjsonスキーマを生成するには
- 6. Javaクラス(またはその逆)からXMLスキーマを生成
- 7. JSONスキーマを解析してデフォルトのjsonオブジェクトを作成する方法や、Javaクラスを生成する方法はありますか?
- 8. POJOからJsonスキーマを生成するには
- 9. JSONからCSVへのスキーマ
- 10. XSDスキーマからXmlSerializerを作成
- 11. JavaクライアントからBigQueryデータセットとテーブル/スキーマを作成する方法(CSVファイルなし)
- 12. Java - Jarファイルからクラスを作成する
- 13. Javaからクラス図を作成するソースコード - Rational Software Architect 7
- 14. CSV構造からオンザフライでJavaクラスを作成する
- 15. jsonからフォームを作成する
- 16. JSONレスポンスからダイナミックレイアウトを作成する
- 17. jsonファイルからコレクションを作成する
- 18. JSONからメニューを作成する
- 19. C/C++のみからJavaクラスを作成できますか?
- 20. クラスからHSQL作成テーブルクエリを作成
- 21. 辞書からクラスを作成する
- 22. JaxBでJavaクラスを作成
- 23. javaでtimeOutクラスを作成する
- 24. Java Reflection:実装クラスを作成する
- 25. .NET内のドメインオブジェクトからdbスキーマを作成する
- 26. XSLスキーマからXMLドキュメントを作成する
- 27. XMLスキーマからGUIを自動的に作成する
- 28. Doctrineエンティティからスキーマを作成/更新する
- 29. ExcelからJavascriptのJSONスキーマへ
- 30. JSONスキーマからJavascript型オブジェクトへ
何がUIに表示したいですか?私は本当に問題が何かを得ることはありません。 'gson'はJavaクラスをJSONフォーマットに変換できます。これは' gson'が行うものです。 – user1983983