Json.NET IsValid dengan skema yang lewat meskipun tidak cocok

Saya memiliki skema json di draft-03. Salah satu properti di dalamnya adalah seperti ini -

"KeyToCheck": {
      "type": "array",
      "items": {
        "type": "object",
        "required": "true",
        "properties": {
          "property1": {
            "type": "string",
            "required": "true"
          },
          "property2": {
            "type": "string",
            "required": "true"
          },
          "property3": {
            "type": "number",
            "required": "true"
          },
          "property4": { "type": "array" }
        }
      },
      "required": "true"
    }

Saya telah menerapkan diperlukan - benar untuk KeyToCheck (yang paling bawah diperlukan-benar di json di atas. Namun metode IsValid masih lewat meskipun array KeyToCheck kosong di Respon. Metode ini digunakan dengan cara ini - Jtoken.parse(response) .isvalid(skema).


person GameFromScratch    schedule 01.08.2019    source sumber


Jawaban (1)


Masalahnya adalah, dalam skema JSON Anda tidak memvalidasi panjang array KeyToCheck. Anda dapat menggunakan properti minItems untuk menyetel batas bawah array. Coba ikuti skema JSON. Semoga ini berhasil.

{
  "$schema": "http://json-schema.org/draft-03/schema#",
  "type": "object",
  "properties": {
    "KeyToCheck": {
      "type": "array",
      "required": true,
      "minItems": 1,
      "items": {
        "type": "object",
        "required": true,
        "properties": {
          "property1": {
            "type": "string",
            "required": true
          },
          "property2": {
            "type": "string",
            "required": true
          },
          "property3": {
            "type": "number",
            "required": true
          },
          "property4": {
            "type": "array"
          }
        }
      }
    }
  }
}

Masukkan JSON:

{
 "KeyToCheck":[]
}

Hasil validasi:

Pesan: Jumlah item array 0 kurang dari jumlah minimum 1. Jalur skema: #/properties/KeyToCheck/minItems

Sunting:

Untuk memvalidasi array yang tidak kosong, gunakan skema ini

{
  "$schema": "http://json-schema.org/draft-03/schema#",
  "type": "object",
  "properties": {
    "KeyToCheck": {
      "type": "array",
      "required": true,
      "maxItems": 0
    }
  }
}

Masukkan JSON:

{
 "KeyToCheck":["test_value"]
}

Hasil validasi:

Pesan: Jumlah item array 1 melebihi jumlah maksimum 0. Jalur skema: #/properties/KeyToCheck/maxItems

person lahiruk    schedule 07.08.2019
comment
dalam kasus saya, masalahnya adalah array KeyToCheck seharusnya kosong. tapi kenyataan yang disyaratkan true tidak gagal itulah masalahnya. Haruskah saya menggunakan maxItems:0 untuk ini? Untuk memastikan tidak ada item dalam array KeyToCheck? - person GameFromScratch; 08.08.2019
comment
Saya sedikit bingung dengan kebutuhan Anda sekarang. Apakah Anda ingin meneruskan validasi ketika array KeyToCheck kosong? Selanjutnya, kata kunci required tidak ada hubungannya dengan ukuran array. Ini hanya memvalidasi ketersediaan bidang JSON dan hanya akan gagal jika bidang KeyToCheck tidak tersedia di input JSON. - person lahiruk; 08.08.2019
comment
jadi yang saya inginkan adalah respons khusus itu, array KeyToCheck harus kosong. Jadi saya hanya memeriksa sekali secara tidak sengaja bahwa require:true akan gagal, tetapi ternyata tidak. itu membuatku khawatir. Saya pikir diperlukan: benar akan memeriksa bahwa ada setidaknya satu objek dalam array. Jadi untuk mengubah pertanyaan saya - bagaimana cara memastikan array kosong sebagai respons dan gagal validasi jika tidak? Maaf bila membingungkan. - person GameFromScratch; 08.08.2019
comment
Maka Anda bisa menggunakan "maxItems": 0 untuk validasi ini. Namun perhatikan bahwa definisi items dalam skema tidak akan masuk akal sehingga Anda mungkin harus menghapusnya. - person lahiruk; 08.08.2019
comment
Oke, jadi jika saya tidak memiliki definisi 'item', apakah akan gagal jika KeyToCheck tidak kosong? - person GameFromScratch; 08.08.2019
comment
Ya. Anda dapat menguji skema Anda di sini. jsonschemavalidator.net - person lahiruk; 09.08.2019