Javascript 我们如何创建JSON模式,在纯JSON的基础上构建一个基于角度的表单?
我们有一个需求,我们计划根据收到的JSON构建一个表单,并将其转换为formlyJsonschema支持的JSON模式,有什么方法可以实现这一点吗Javascript 我们如何创建JSON模式,在纯JSON的基础上构建一个基于角度的表单?,javascript,json,angular,angular-formly,Javascript,Json,Angular,Angular Formly,我们有一个需求,我们计划根据收到的JSON构建一个表单,并将其转换为formlyJsonschema支持的JSON模式,有什么方法可以实现这一点吗 Eg JSON: { "isSignInRequired": true, "isEmployee": false, "noOfEmployees": { "minValue": 3, "maxValue": 50 } } 要求:如果值是
Eg JSON:
{
"isSignInRequired": true,
"isEmployee": false,
"noOfEmployees": {
"minValue": 3,
"maxValue": 50
}
}
要求:如果值是布尔值,则转换为切换类型,如果存在整数或字符串值,则转换为文本框类型
formlyJsonschema支持的所需转换JSON模式如下:
"schema" :[
{
"properties": {
"isSignInRequired": {
"type": "toggle",
"default": true
},
"isEmployee": {
"type": "toggle",
"default": true
}
}
},
{
"description": "noOfEmployees",
"type": "object",
"properties": {
"minValue": {
"type": "integer",
"title": "minValue"
},
"maxValue": {
"type": "integer",
"title": "maxValue",
"minLength": 3
}
}
}]
我尝试使用一些基于JSON模式的示例,但无法满足我的要求,示例如下:
无法从一个数据样本中派生出
默认值
和最大长度
断言,但您可以假定类型
和属性
。您可以选择假设其他断言,例如附加属性
var data = {
"isSignInRequired": true,
"isEmployee": false,
"noOfEmployees": {
"minValue": 3,
"maxValue": 50
}
};
// could use lodash mapValues instead
var mapValues = (fn, data) => Object.keys(data).reduce((accum, key) => ({ ...accum, [key]: fn(data[key], key) }), {});
var toSchemaType = data =>
Array.isArray(data)
? 'array'
: typeof data;
var deriveSchema = (data, key) => ({
type: toSchemaType(data),
...(key && { title: key }),
...(toSchemaType(data) === 'object' && {
properties: mapValues(deriveSchema, data)
})
});
deriveSchema(data)
您还需要阵列支持吗?您可以修改
toSchemaType
函数以返回切换
。我没有这样做,因为表单技术会像那样破坏json模式是毫无意义的。函数deriveSchema()的关键参数是什么?我们减少了数据对象中的键,因此键是isSignInRequired
,isEmployee
,等。密钥被传入,以便它可以用作架构的标题。在根对象模式中没有键,因此键参数是可选的。感谢您的支持,我能够构建表单,但我需要一些支持,我在JSON中使用数组,而不是模式类型到数组,我正在转换为类型对象,现在我有了带有“name”的属性在json中,我想为它显示标签,这里是一个演示示例:如果您能深入了解这一点,这将非常有用。非常感谢。