动态属性的 JSON 模式

Posted

技术标签:

【中文标题】动态属性的 JSON 模式【英文标题】:JSON schema for dynamic properties 【发布时间】:2015-04-26 03:49:34 【问题描述】:

我有一个对象,其中属性的“键”将被动态设置...在 JSON 模式中定义它的正确方法是什么?

这就是我的对象的样子


  "column_definitions": [    
    
     "Field_1": 
       "type": "Numeric",
       "isNullable": false
      
    ,
    
     "Field_2": 
       "type": "Boolean",
       "isNullable": true
      
    
 ],
 "row_values": [ ... ]

“column_definitions”的“key”总是动态的(它可以是“Field_1”,也可以是“Field_24”

在 JSON Schema 中定义它的正确方法是什么?

我不想只说“类型”:“对象”,因为我希望能够定义静态属性“类型”和“isNullable” 另外,我不能使用“oneOf”,因为我不知道“关键”可能是什么,并且没有设定的潜在值。

这是我目前所拥有的:


  "$schema": "http://json-schema.org/draft-04/schema",
  "title": "SomeSchema",
  "description": "SomeDescription",
  "type": "object",
  "properties": 
  
    "column_definitions":  "type": ["array", "null"], "items":  "$ref": "#/definitions/columnDef" , "readOnly": true ,
    "row_values":  "type": ["array", "null"], "items":  "type": "object" , "readOnly": true 
  ,
  "definitions": 
    "columnDef" : 
      "type": "object",
      "properties": 
        "THIS_IS_MY_DYNAMIC_PROPERTY": 
          "type": "object",
          "properties": 
            "type":  "type" : ["string", "null"], "enum": ["Text", "Boolean", "Numeric", "DateTime"], "readOnly": true ,
            "isNullable":  "type" : ["boolean", "null"], "readOnly": true 
          
                      
      
    
  

【问题讨论】:

你能解决吗?我现在也面临同样的情况 【参考方案1】:

我认为您正在寻找的是 patternProperties 字段,而不是 properties 字段。应该看起来像这样,假设您只想要一个匹配所有模式:


    "$schema": "http://json-schema.org/draft-04/schema",
    "title": "SomeSchema",
    "description": "SomeDescription",
    "type": "object",
    "properties": 
        "column_definitions": 
            "type": [
                "array",
                "null"
            ],
            "items": 
                "$ref": "#/definitions/columnDef"
            ,
            "readOnly": true
        ,
        "row_values": 
            "type": [
                "array",
                "null"
            ],
            "items": 
                "type": "object"
            ,
            "readOnly": true
        
    ,
    "definitions": 
        "columnDef": 
            "type": "object",
            "patternProperties": 
                ".*": 
                    "type": "object",
                    "properties": 
                        "type": 
                            "type": [
                                "string",
                                "null"
                            ],
                            "enum": [
                                "Text",
                                "Boolean",
                                "Numeric",
                                "DateTime"
                            ],
                            "readOnly": true
                        ,
                        "isNullable": 
                            "type": [
                                "boolean",
                                "null"
                            ],
                            "readOnly": true
                        
                    
                
            
        
    

【讨论】:

以上是关于动态属性的 JSON 模式的主要内容,如果未能解决你的问题,请参考以下文章

处理动态 JSON 模式解码

使用 pyspark 解析 JSON 时嵌套动态模式不起作用

如何定义至少需要许多属性之一的 JSON 模式

Json.NET:单个属性的不同JSON模式

JSON 模式 - 如果对象*不*包含特定属性则有效

属性表模式与将所有属性存储在 json 列中 [重复]