我有两个不同的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版本草案-04)
我的问题很简单。我有一个遵循第一个模式的javascript对象'calendarA',即
validates(calendarA, schemaA); // true
我想描述一个模式之间的转换,即从schemaA到schemaB,这样我就可以将calendarA作为输入传递,并得到适合schemaB的新calendarB。放在代码中:
var calendarB = fromSchemaAtoB(calendarA, schemaA, schemaB);
validates(calendarB, schemaB); // true
从您的角度来看,编写从模式A到模式B的转换应该采用哪种方法/工具最佳?我真的希望能够使用这些模式来描述转换,例如:
schemaB.properties.foo = schemaA.properties.dtstart
我看到很多基本的JSON转换包,但在大多数情况下,它们都是将输出指定为外部模板,而不考虑模式(因此结果可能与schemaB不符合)。非常感谢您提前的帮助!JG
注:如果可能的话,我更喜欢基于JavaScript的解决方案,但我真的很开放任何可能性。
编辑1:在阅读@jason的答案后澄清,问题是如何更好地描述模式之间的关系以及如何应用它们来获得calendarB。所以,如果您愿意:
var calendarB = transform(calendarA, schemaA, schemaB, relationsAtoB);
validates(calendarB, schemaB); // true
问题是如何更好地描述“关系A到B”,以及如何实现“transform”函数。
schemaA
转换为schemaB
而不是改变ObjectA,则需要使用模板来描述schemeA
中属性与schemeB
中专用属性之间的关系,而不是使用schemeB
。如果您不喜欢创建模板,则fromSchemaAtoB()
应该可以在没有模板的情况下完成每个转换(但这是非常不可维护的方法,最好更改CONFIG而不是方法本身)。 - Appeiron