に1 JSONスキーマから変換する方法を私は2つの異なるjson-schemasありますJSONスキーマ:別の
schemaAを - >http://json-schema.org/calendar
{
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "A representation of an event",
"type": "object",
"required": [ "dtstart", "summary" ],
"properties": {
"dtstart": {
"format": "date-time",
"type": "string",
"description": "Event starting time"
},
"dtend": {
"format": "date-time",
"type": "string",
"description": "Event ending time"
},
"summary": { "type": "string" },
"location": { "type": "string" },
"url": { "type": "string", "format": "uri" },
"duration": {
"format": "time",
"type": "string",
"description": "Event duration"
},
"rdate": {
"format": "date-time",
"type": "string",
"description": "Recurrence date"
},
"rrule": {
"type": "string",
"description": "Recurrence rule"
},
"category": { "type": "string" },
"description": { "type": "string" },
"geo": { "$ref": "http: //json-schema.org/geo" }
}
}
で定義されているカレンダーschemaB - >別のカレンダースキーマ(json-schema version draft-04)
私の質問は簡単です。私は
validates(calendarA, schemaA); // true
、すなわち、最初のスキーマを、次のJavaScriptオブジェクトのcalendarA」を持っている私はschemaAからschemaBに、すなわち、スキーマ間の変換を記述したいので、私は、入力としてcalendarAを渡して取得することができますスキーマBに適合する新しいcalendarB。コードに入れよう:
var calendarB = fromSchemaAtoB(calendarA, schemaA, schemaB);
validates(calendarB, schemaB); // true
あなたの視点から見ると、あなたの意見はSkhemaAtoBの人から書いた方が良いでしょうか?私は基本的なJSON変換パッケージをたくさん見ましたが、それらのほとんどにあなたが取ることはありません外部のテンプレートとしてあなたの出力を指定するように私には思える
schemaB.properties.foo = schemaA.properties.dtstart
:私は本当に、スキーマを使用してtransfomationsを記述するような何かをしたいですスキーマを考慮に入れます(結果はschemaBに関して無効です)。
ありがとうございます!
JG
PS:可能な場合、私には、JavaScriptベースのソリューションを好むが、私はすべての可能性には本当に開いています。
EDIT 1:@ jasonの答えを読んだ後に明確にするために、スキーマ間のこのような関係をどのように記述し、カレンダーを取得するためにそれらを適用するかが問題です。あなたが好むのであれば:
var calendarB = transform(calendarA, schemaA, schemaB, relationsAtoB);
validates(calendarB, schemaB); // true
との質問に、その後、より良い「relationsAtoB」を説明し、どのように「変換」機能を実装する方法です。
こんにちは、オブジェクトを作成する前にスキームデータを変換したり、既存のオブジェクトを別のオブジェクトに変更したりすることをお勧めしますか? – Appeiron
'VAR calendarB = fromSchemaAtoB(calendarA、schemaA、schemaB);あなたは本当にあなたが代わりをObjectAを変異の' schemeB'に 'shemeA'を変換したい場合は、'、あなたが 'プロパティの関係を説明schemeB'テンプレートを必要とする代わりに、 'schemeA'に' schemeB'の専用プロパティーに変換します。テンプレートを作成したくない場合、 'fromSchemaAtoB()'はテンプレートなしですべての変換を実行する必要があります(これは非常にサポートされていないアプローチですので、CONFIGをメソッド自体の代わりに変更する方が良い)。 – Appeiron
こんにちは。 「オブジェクトを作成する前にスキームデータを変換する」というのは、2番目のオブジェクトがまったく新しいオブジェクトであることを意味します。 2つ目の選択肢は、特にパフォーマンス上の理由から変更したい大きなオブジェクトに対しても非常に面白いです。私は、理想的なフレームワークは、両方の変換タイプ、つまり新しいオブジェクト全体を作成するデフォルトのタイプと、入力オブジェクトを変更する2つ目の変換タイプの両方を使用する必要があると思います。しかし、今は新しい対象です。ありがとう@Appeiron – user6614015