Tentukan jenis peta menggunakan json-schema v4

Saya mencoba mendefinisikan skema referensi untuk digunakan sebagai tipe peta Cassandra CQL dengan bidang teks. Secara khusus, saya ingin memetakan URI ke string.

Saat ini saya punya:

"scope": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string",
          "format": "uri"
        },
        "permission": {
          "type": "string",
          "enum": ["read_only", "read_write", "write_only"]
        }
      },
      "required": ["uri", "permission"],
      "additionalProperties": false
    }

Ini bagus untuk data seperti

{"uri":"http://example.com",
  "permission": "read_only"}

Tapi saya ingin skema untuk data seperti

{"http://example.com": "read_only"}

http://spacetelescope.github.io/understanding-json-schema/reference/object.html punya solusinya:

{
  "type": "object",
  "patternProperties": {
    "^S_": { "type": "string" },
    "^I_": { "type": "integer" }
  }
}

Masalahnya adalah saya harus mendefinisikan format bawaan dengan ekspresi reguler. Melihat contoh regex untuk URI membuat saya ingin menghindari hal ini.

Karena jumlah URI yang saya miliki terbatas, pemetaan enum ke enum juga bisa menjadi solusi. Apakah itu bisa dilakukan?


person EthernetCable    schedule 12.03.2014    source sumber


Jawaban (1)


Jika saya diizinkan menjawab pertanyaan saya sendiri, saya yakin solusinya adalah dengan menggunakan definisi PatternProperties untuk kuncinya, dengan regex yang sangat spesifik. Nilainya dapat berupa jenis apa pun yang didukung oleh skema json, termasuk ekspresi reguler lainnya. Dalam kasus saya, ini adalah enum.

Jadi definisinya terlihat seperti-

  "patternProperties": {
    "^https:\/\/www.example.com\/auth\/\\w+$": {
      "type": "string",
      "enum": ["read_only", "read_write", "write_only"]
    }
  },
  "additionalProperties": false
person EthernetCable    schedule 07.11.2014