Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建嵌套JSON模式的设计方法_Json_Validation_Nested_Schema - Fatal编程技术网

创建嵌套JSON模式的设计方法

创建嵌套JSON模式的设计方法,json,validation,nested,schema,Json,Validation,Nested,Schema,我对创建json模式比较陌生。我的问题是关于具有多个嵌套级别的模式的适当布局设计(一个对象包含另一个子对象,该子对象也可能包含对象数组等) 选项#1)最初我将模式放入定义中,然后在“数据”/“输出”部分嵌套对象,并使用ref引用每个对象。我认为这将使消费者更容易理解模式布局/嵌套。但输出的可读性似乎较低(每个级别和子对象都有更多的大括号) 选项#2)相反,如果在定义中,我将子对象定义为每个父定义中的属性(并使用$ref),则输出看起来更清晰,但层次结构往往隐藏在模式定义中 是否有理由使用更好的特

我对创建json模式比较陌生。我的问题是关于具有多个嵌套级别的模式的适当布局设计(一个对象包含另一个子对象,该子对象也可能包含对象数组等)

选项#1)最初我将模式放入定义中,然后在“数据”/“输出”部分嵌套对象,并使用ref引用每个对象。我认为这将使消费者更容易理解模式布局/嵌套。但输出的可读性似乎较低(每个级别和子对象都有更多的大括号)

选项#2)相反,如果在定义中,我将子对象定义为每个父定义中的属性(并使用$ref),则输出看起来更清晰,但层次结构往往隐藏在模式定义中

是否有理由使用更好的特定方法(可读性、验证等),或者我的方法可能是错误的。感谢您的建议。 谢谢

选项#1-在“数据”/“输出”部分完成嵌套。checkPaymentDetail具有属性checkPaymentAdditionalDetails

"definitions": {
    ....
},
"type": "object",
"properties": {
    "paymentList": {
      "type": "array",
      "items": {
        "paymentItem": {
          "$ref": "#/definitions/paymentItem"
        },
        "paymentDetail": {
          "type": "object",
          "properties": {
                "checkPaymentDetail": {
                  "$ref": "#/definitions/checkPaymentDetail"
                },
                "checkPaymentAdditionalDetails": {
                  "type": "object",
                  "properties": {
                    "checkPaymentAdditionalDetails": {
                      "$ref": "#/definitions/checkPaymentAdditionalDetails"
                    }
                  }
                }
           }
# more stuff, then done
"definitions": {
    "paymentList": {
        "type": "array",
        "items": {
            "paymentItem": {
                "$ref": "#/definitions/paymentItem"
            },
            "paymentDetail": {
                "type": "object",
                "properties": {
                    "checkPaymentDetail": {
                        "$ref": "#/definitions/checkPaymentDetail"
                    }
                }
            }
        }
    },
    "checkPaymentDetail": {
        "type": "object",
        "properties": {
            "recordID": {
                "type": "string",
            },
            "checkPaymentAdditionalDetails": {
                "$ref": "#/definitions/checkPaymentAdditionalDetails"

            }
        },...more 
},
...end of definitions

"type": "object",
"properties": {
       "paymentList": {
           "$ref": "#/definitions/paymentList"
       }
}
        
JSON输出

      "paymentDetail": {
        "checkPaymentDetail": {
          "recordID": "A2",
        },
        "checkPaymentAdditionalDetails": {
          "checkPaymentAdditionalDetails": {
            "recordID": "X2,
            "batchID": "01",
          }
        }
      }
    ...
        "paymentDetail": {
          "checkPaymentDetail": {
                "recordID": "A2"
                "checkPaymentAdditionalDetails": {
                    "recordID": "B1",
                    "amount": 4367545,
                }
            }
        }
        ...
结束JSON输出

      "paymentDetail": {
        "checkPaymentDetail": {
          "recordID": "A2",
        },
        "checkPaymentAdditionalDetails": {
          "checkPaymentAdditionalDetails": {
            "recordID": "X2,
            "batchID": "01",
          }
        }
      }
    ...
        "paymentDetail": {
          "checkPaymentDetail": {
                "recordID": "A2"
                "checkPaymentAdditionalDetails": {
                    "recordID": "B1",
                    "amount": 4367545,
                }
            }
        }
        ...
架构-在“数据”/“输出”部分中完成嵌套(checkPaymentDetail具有属性checkPaymentAdditionalDetails)


选项2 JSON输出

      "paymentDetail": {
        "checkPaymentDetail": {
          "recordID": "A2",
        },
        "checkPaymentAdditionalDetails": {
          "checkPaymentAdditionalDetails": {
            "recordID": "X2,
            "batchID": "01",
          }
        }
      }
    ...
        "paymentDetail": {
          "checkPaymentDetail": {
                "recordID": "A2"
                "checkPaymentAdditionalDetails": {
                    "recordID": "B1",
                    "amount": 4367545,
                }
            }
        }
        ...
结束JSON输出

      "paymentDetail": {
        "checkPaymentDetail": {
          "recordID": "A2",
        },
        "checkPaymentAdditionalDetails": {
          "checkPaymentAdditionalDetails": {
            "recordID": "X2,
            "batchID": "01",
          }
        }
      }
    ...
        "paymentDetail": {
          "checkPaymentDetail": {
                "recordID": "A2"
                "checkPaymentAdditionalDetails": {
                    "recordID": "B1",
                    "amount": 4367545,
                }
            }
        }
        ...
架构-在“定义”中定义的嵌套(checkPaymentDetail具有子对象checkPaymentAdditionalDetails的属性)