Test-Json (Microsoft.PowerShell.Utility)


Test-Json

Modül:
Microsoft.PowerShell.Utility

Bir dizenin geçerli bir JSON belgesi olup olmadığını test eder

Sözdizimi

Test-Json
    [-Json] <String>
    [<CommonParameters>]
Test-Json
    [-Json] <string>
    [-Schema] <string>
    [<CommonParameters>]
Test-Json
    [-Json] <string>
    [-SchemaFile] <string>
    [<CommonParameters>]
Test-Json
    [-Path] <string>
    [<CommonParameters>]
Test-Json
    [-Path] <string>
    [-Schema] <string>
    [<CommonParameters>]
Test-Json
    [-Path] <string>
    [-SchemaFile] <string>
    [<CommonParameters>]
Test-Json
    [-LiteralPath] <string>
    [<CommonParameters>]
Test-Json
    [-LiteralPath] <string>
    [-Schema] <string>
    [<CommonParameters>]
Test-Json
    [-LiteralPath] <string>
    [-SchemaFile] <string>
    [<CommonParameters>]

Tanım

Test-Json cmdlet'i, bir dizenin geçerli bir JavaScript Nesne Gösterimi (JSON) belgesi olup olmadığını test eder ve isteğe bağlı olarak JSON belgesini sağlanan bir şemaya göre doğrulayabilir.

Doğrulanan dize daha sonra JSON biçimli bir dizeyi PowerShell'de kolayca yönetilen veya JSON girişine erişen başka bir programa veya web hizmetine gönderilen bir JSON nesnesine dönüştüren ConvertFrom-Json cmdlet'iyle birlikte kullanılabilir.

Birçok web sitesi, sunucular ve web tabanlı uygulamalar arasındaki iletişim için verileri serileştirmek amacıyla XML yerine JSON kullanır.

Bu cmdlet PowerShell 6.1'de tanıtıldı

Örnekler

Örnek 1: Bir nesnenin geçerli JSON olup olmadığını test edin

Bu örnek, giriş dizesinin geçerli bir JSON belgesi olup olmadığını test eder.

'{"name": "Ashley", "age": 25}' | Test-Json

True

Örnek 2: Bir nesneyi sağlanan bir şemaya göre test edin

Bu örnek, JSON şeması içeren bir dize alır ve onu bir giriş dizesiyle karşılaştırır.

$schema = @'
{
  "definitions": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.com/root.json",
  "type": "object",
  "title": "The Root Schema",
  "required": [
    "name",
    "age"
  ],
  "properties": {
    "name": {
      "$id": "#/properties/name",
      "type": "string",
      "title": "The Name Schema",
      "default": "",
      "examples": [
        "Ashley"
      ],
      "pattern": "^(.*)$"
    },
    "age": {
      "$id": "#/properties/age",
      "type": "integer",
      "title": "The Age Schema",
      "default": 0,
      "examples": [
        25
      ]
    }
  }
}
'@
'{"name": "Ashley", "age": "25"}' | Test-Json -Schema $schema

Test-Json:
Line |
  35 |  '{"name": "Ashley", "age": "25"}' | Test-Json -Schema $schema
     |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~
     | The JSON is not valid with the schema: Value is "string" but should be "integer" at '/age'
False

Bu örnekte şema yaş için bir tamsayı beklediğinden ancak test ettiğimiz JSON girişi bunun yerine bir dize değeri kullandığından bir hata alıyoruz.

Daha fazla bilgi için bkz. JSON Şeması.

Örnek 3: Bir nesneyi dosyadaki bir şemaya göre test edin

JSON şeması $ref anahtar sözcüğünü kullanarak tanımlara referans verebilir. $ref başka bir dosyaya başvuran bir URI'ye çözümlenebilir. SchemaFile parametresi, JSON şema dosyasının gerçek yolunu kabul eder ve JSON dosyalarının bu tür şemalara göre doğrulanmasına olanak tanır.

Bu örnekte schema.json dosyası definitions.json'a başvuruyor.

Get-Content schema.json

{
  "description":"A person",
  "type":"object",
  "properties":{
    "name":{
      "$ref":"definitions.json#/definitions/name"
    },
    "hobbies":{
      "$ref":"definitions.json#/definitions/hobbies"
    }
  }
}

Get-Content definitions.json

{
  "definitions":{
    "name":{
      "type":"string"
    },
    "hobbies":{
      "type":"array",
      "items":{
        "type":"string"
      }
    }
  }
}

'{"name": "James", "hobbies": [".NET", "Blogging"]}' | Test-Json -SchemaFile 'schema.json'

True

Daha fazla bilgi için bkz. Karmaşık bir şema yapılandırma.

Parametreler

-Json

Geçerliliği test edilecek JSON dizesini belirtir. Dizeyi içeren bir değişken girin veya dizeyi alan bir komut veya ifade yazın. Ayrıca bir dizeyi Test-Json'a yönlendirebilirsiniz.

Json parametresi gereklidir.

Tip :

String

Konum:

0

Varsayılan değer:

None

Gerekli:

True

Boru hattı girişini kabul edin:

True

Joker karakterleri kabul et:

False

-LiteralPath

JSON dosyasının yolunu belirtir. LiteralPath'in değeri tam olarak yazıldığı gibi kullanılır. Hiçbir karakter joker karakter olarak yorumlanmaz. Yol kaçış karakterleri içeriyorsa, onu tek tırnak işaretleri içine alın. Tek tırnak işaretleri PowerShell'e hiçbir karakteri kaçış dizisi olarak yorumlamamasını söyler.

Bu parametre PowerShell 7.4'e eklenmiştir.

Tip :

String

Takma adlar:

PSPath, LP

Konum:

0

Varsayılan değer:

None

Gerekli:

True

Boru hattı girişini kabul edin:

True

Joker karakterleri kabul et:

False

-Path

JSON dosyasının yolunu belirtir. Bu cmdlet, öğeyi belirtilen konuma getirir. Joker karakterlere izin verilir ancak desenin tek bir dosyaya çözümlenmesi gerekir.

Bu parametre PowerShell 7.4'e eklenmiştir.

Tip :

String

Konum:

0

Varsayılan değer:

None

Gerekli:

True

Boru hattı girişini kabul edin:

True

Joker karakterleri kabul et:

True

-Schema

JSON girişinin doğrulanacağı bir şema belirtir. Geçilirse, Test-Json, JSON girişinin Schema parametresi tarafından belirtilen spesifikasyona uygun olduğunu doğrular ve yalnızca giriş uygunsa $true sonucunu döndürür sağlanan şemaya.

Daha fazla bilgi için bkz. JSON Şeması.

Tip :

String

Konum:

1

Varsayılan değer:

None

Gerekli:

True

Boru hattı girişini kabul edin:

False

Joker karakterleri kabul et:

False

-SchemaFile

JSON girişini doğrulamak için kullanılan şema dosyasını belirtir. Kullanıldığında, Test-Json yalnızca JSON girişinin SchemaFile parametresi tarafından belirtilen dosyada tanımlanan şemaya uyması durumunda $true değerini döndürür.

Daha fazla bilgi için bkz. JSON Şeması.

Tip :

String

Konum:

1

Varsayılan değer:

None

Gerekli:

True

Boru hattı girişini kabul edin:

False

Joker karakterleri kabul et:

False

Girişler

Dize

Bu cmdlet'e bir JSON dizesi aktarabilirsiniz.

Çıkışlar

Boolean

Bu cmdlet, JSON geçerliyse $true, aksi halde $false değerini döndürür.

Notlar

PowerShell 6'dan bu yana PowerShell, JSON işlevleri için Newtonsoft.Json derlemelerini kullanır. Newtonsoft'un uygulaması, yorum desteği ve tek tırnak kullanımı gibi JSON standardına yönelik çeşitli uzantılar içerir. Özelliklerin tam listesi için https://www.newtonsoft.com/json adresindeki Newtonsoft belgelerine bakın.

PowerShell 7.4'ten itibaren Test-Json, JSON ayrıştırma için System.Text.Json'u ve şema doğrulama için JsonSchema.NET'i kullanır. Bu değişikliklerle Test-Json:

  • Artık Taslak 4 şemalarını desteklemiyor
  • Yalnızca kesinlikle uyumlu JSON'u destekler

Newtonsoft.Json ve System.Text.Json arasındaki farkların tam listesi için Newtonsoft.Json'dan System.Text.Json'a Geçiş bölümündeki Farklılıklar tablosuna bakın.

JSON şeması özellikleri hakkında daha fazla bilgi için JSON-Schema.org adresindeki belgelere bakın.

İlgili makaleler