Ich habe die zwei verschiedenen json-schemas zu transformieren:json-Schema: Wie aus einem json-Schema in eine anderen
schemaA -> Ein Kalender, wie definiert in 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 -> Ein anderes Kalenderschema (auch json-schema version draft-04)
Meine Frage ist einfach. Ich habe ein Javascript-Objekt ‚calendarA‘, die das erste Schema folgt, das heißt
validates(calendarA, schemaA); // true
Ich mag eine Transformation zwischen dem Schema beschreiben, dh von schemaA zu schemaB, so kann ich calendarA als Eingabe übergeben und ein neuer KalenderB, der zu SchemaB passt. Legen Sie es in Code:
var calendarB = fromSchemaAtoB(calendarA, schemaA, schemaB);
validates(calendarB, schemaB); // true
Aus Ihrer Sicht, die die besten Ansatz/Tool fromSchemaAtoB Jungs zu schreiben? Ich möchte wirklich transfomations beschreiben die Schemata verwenden, so etwas wie:
schemaB.properties.foo = schemaA.properties.dtstart
sah ich eine Menge von grundlegenden json Transformation Pakete, aber es scheint mir, dass in den meisten von ihnen Sie Ihre Ausgabe als externe Vorlagen angeben, die nicht nehmen Berücksichtigung der Schemata (Ergebnis könnte in Bezug auf SchemaB ungültig sein).
Vielen Dank im Voraus!
JG
PS: Ich bevor Javascript-basierten Lösungen, wenn möglich, aber ich bin wirklich offen für jede Möglichkeit.
EDIT 1: Um nach dem Lesen @ Jasons Antwort zu klären, ist die Frage, wie man solche Beziehungen zwischen Schemas besser beschreiben und wie man sie anwenden kann, um KalenderB zu erhalten. Also, wenn Sie bevorzugen:
var calendarB = transform(calendarA, schemaA, schemaB, relationsAtoB);
validates(calendarB, schemaB); // true
und die Frage ist dann, wie man besser beschreiben „relationsAtoB“, und wie zur Umsetzung der „Transformation“ Funktion.
Hallo, bitte sagen Sie mir, was bevorzugen Sie, um Schema-Daten zu transformieren, bevor Sie ein Objekt erstellen oder ein bestehendes Objekt zu einem anderen mutieren? – Appeiron
'var calendarB = fromSchemaAtoB (calendarA, schemaA, schemaB);' Wenn Sie wirklich sicher sind, 'shemeA' in' schemaB' zu transformieren, anstatt ObjectA zu mutieren, benötigen Sie anstelle von 'schemeB' eine Vorlage, die die Beziehungen von Eigenschaften beschreibt in 'schemaA' zu dedizierten Eigenschaften in' schemeB'. Wenn Sie keine Templates erstellen möchten, sollte 'fromSchemaAtoB()' jede Transformation ohne Template durchführen (aber dies ist ein sehr untragbarer Ansatz, besser CONFIG anstelle der Methode selbst geändert zu haben) – Appeiron
Hi. Wenn Sie unter "Transformieren von Schemadaten vor dem Erstellen eines Objekts" meinen, dass das zweite Objekt ein völlig neues Objekt ist, würde ich sagen, dass ich diese Option bevorzuge. Ihre zweite Option ist sehr interessant auch speziell für große Objekte, die ich aus Leistungsgründen mutieren möchte. Ich vermute, dass das ideale Framework beide Transformationstypen verwenden sollte, eine Standardmethode, die ein ganzes neues Objekt erstellt, und eine zweite, die das Eingabeobjekt mutiert. Aber für jetzt neue Objekte. Danke @Appeiron – user6614015