2

JSON スキーマを使用し、新しい型を許可したい (現在、文字列番号配列オブジェクト boolean と null があります)

たとえば、連絡先のタイプを追加したい

JSONでも可能ですか?助言がありますか?

ありがとう

4

4 に答える 4

3

contact一度定義して何度も再利用することが目標の場合は、object名前付きの定義を作成し、contact必要なときにいつでも JSON ポインターで参照できます。

その一例は次のようになります。

{
    "type": "object",
    "definitions": {
        "contact": {
            "properties": {
                "name": {
                "type": "string"
                 },
                 "phone": {
                    "type": "string"
                }
            }
        }
    },
    "properties": {
        "Person": {
            "properties": {
                "contact": {
                    "$ref" : "#/definitions/contact"
                },
                "birthday": {
                    "type": "string",
                    "format": "date-time"
                }
            }
        },
        "Company": {
            "properties": {
                "contact": {
                    "$ref" : "#/definitions/contact"
                },
                "inBusinessSince" : {
                    "type": "string",
                    "format": "date-time"
                }
            }
        }
    }
}

ここで、Person よりも Company の contact 属性に多くのプロパティを設定したいとします。allOf キーワードを使用すると、上記の Company は次のようになります。

"Company": {
    "properties": {
        "contact": {
            "allOf": [
                {"$ref" : "#/definitions/contact"},
                {
                    "properties": {
                        "fax": {
                            "type": "string"
                    }
                }
            ],
           "inBusinessSince" : {
               "type": "string",
               "format": "date-time"
            }
        }
    }

詳細については、次のリンクを参照してください。

于 2014-11-23T15:11:38.427 に答える
2

はい、JSONで連絡先のタイプを追加できます

あなたのプログラムがこのフォーマットの連絡先のタイプのデータを必要としているとしましょう

{
contact: [
{contactid:1, contactname: "abc", address:"abcdfg"},
{contactid:2, contactname: "hjk", address:"hjkdfg"}
]
}

ここで、Contactオブジェクトには、ID、名前、およびアドレスがあります。連絡先のスキーマを作成できます

{
"type" : "object",
"properties": {
         "contact":{
              "type":"object"
              "items":{
                  "type": "object",
                  "properties":{
                          "contactid": {"type":"number"}
                          "contactname": {"type":"string"}
                          "address": {"type":"string"}
                               }
                      }
                   }
                }
} 
于 2012-11-19T13:04:50.267 に答える
0

そのための json スキーマがあります: http://json-schema.org/card

json スキーマに含めるには:

{
    "contact": { "$ref": "http://json-schema.org/card"}
}
于 2015-03-03T20:00:16.857 に答える
0

「連絡先」の型はオブジェクト型になりますね。このオブジェクトには、アドレスを含む文字列など、いくつかの属性があります。したがって、新しい型を定義する必要はまったくありません。すべての新しい型は、分解すると、文字列、数値、配列、またはオブジェクトのプリミティブ型で構成されるためです。

連絡先の場合は、次のように記述できます。

"contact"{
    "id": "contact",
    "required": false,
    "type": "object",
    "properties":{
        "address"{
            "id": "address",
            "required": true,
            "type": "string"
        }
        "phoneNumbers"{
            "id": "phoneNumbers",
            "required": false,
            "type": "array",
            "items":{
                "id": "0",
                "required": false,
                "type": "object",
                "properties":{
                    "type"{
                        "id": "type",
                        "required": false,
                        "type": "string"
                    }
                    "number"{
                        "id": "number",
                        "required": false,
                        "type": "string"
                    }
                }
            }
        }
    }
}

このスキーマによると、単純な連絡先オブジェクトは次のようになります。

{
    "address": "Example Street 123",
    "phoneNumbers":
    [
        {
            "type": "home",
            "number": "123-456789"
        }
    ]
} 

ここで、別のオブジェクト内に複数の連絡先があるとします。連絡先を保存するすべての場所に連絡先スキーマを追加する必要があります。
前述のように、スキーマが非常に大きくなる可能性がありますが、新しい型を導入する必要はないと思います。これとは別に、新しいプリミティブ型を許可する JSON スキーマ仕様を知りません。

于 2012-11-19T12:51:31.300 に答える