Udostępnij za pośrednictwem


Test-Json

Sprawdza, czy ciąg jest prawidłowym dokumentem JSON

Składnia

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>]

Opis

Polecenie Test-Json cmdlet sprawdza, czy ciąg jest prawidłowym dokumentem JavaScript Object Notation (JSON) i opcjonalnie może sprawdzić, czy dokument JSON jest prawidłowy względem podanego schematu.

Zweryfikowany ciąg można następnie użyć z ConvertFrom-Json poleceniem cmdlet przekonwertować ciąg w formacie JSON na obiekt JSON, który jest łatwo zarządzany w programie PowerShell lub wysyłany do innego programu lub usługi internetowej, która uzyskuje dostęp do danych wejściowych JSON.

Wiele witryn sieci Web używa formatu JSON zamiast XML do serializacji danych na potrzeby komunikacji między serwerami i aplikacjami internetowymi.

To polecenie cmdlet zostało wprowadzone w programie PowerShell 6.1

Przykłady

Przykład 1. Testowanie, czy obiekt jest prawidłowym kodem JSON

W tym przykładzie sprawdza się, czy ciąg wejściowy jest prawidłowym dokumentem JSON.

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

True

Przykład 2. Testowanie obiektu względem podanego schematu

W tym przykładzie ciąg zawiera schemat JSON i porównuje go z ciągiem wejściowym.

$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

W tym przykładzie występuje błąd, ponieważ schemat oczekuje liczby całkowitej dla wieku , ale testowane dane wejściowe JSON używają zamiast tego wartości ciągu.

Aby uzyskać więcej informacji, zobacz Schemat JSON.

Przykład 3. Testowanie obiektu względem schematu z pliku

Schemat JSON może odwoływać się do definicji przy użyciu $ref słowa kluczowego. Może $ref rozpoznać identyfikator URI, który odwołuje się do innego pliku. Parametr SchemaFile akceptuje ścieżkę literału do pliku schematu JSON i umożliwia weryfikowanie plików JSON względem takich schematów.

W tym przykładzie schema.json plik odwołuje się do definitions.jsonpliku .

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

Aby uzyskać więcej informacji, zobacz Tworzenie struktury złożonego schematu.

Parametry

-Json

Określa ciąg JSON do przetestowania pod kątem ważności. Wprowadź zmienną zawierającą ciąg lub wpisz polecenie lub wyrażenie, które pobiera ciąg. Możesz również przekazać ciąg do Test-Jsonciągu .

Parametr Json jest wymagany.

Typ:String
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-LiteralPath

Określa ścieżkę do pliku JSON. Wartość LiterałuPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

Ten parametr został dodany w programie PowerShell 7.4.

Typ:String
Aliasy:PSPath, LP
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-Path

Określa ścieżkę do pliku JSON. To polecenie cmdlet pobiera element w określonej lokalizacji. Dozwolone są symbole wieloznaczne, ale wzorzec musi być rozpoznawany jako pojedynczy plik.

Ten parametr został dodany w programie PowerShell 7.4.

Typ:String
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-Schema

Określa schemat do sprawdzania poprawności danych wejściowych JSON. W przypadku przekazania sprawdza, Test-Json czy dane wejściowe JSON są zgodne ze specyfikacją określoną przez parametr Schemat i zwracają $true tylko wtedy, gdy dane wejściowe są zgodne z podanym schematem.

Aby uzyskać więcej informacji, zobacz Schemat JSON.

Typ:String
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-SchemaFile

Określa plik schematu używany do sprawdzania poprawności danych wejściowych JSON. W przypadku użycia funkcja Test-Json zwraca wartość tylko $true wtedy, gdy dane wejściowe JSON są zgodne ze schematem zdefiniowanym w pliku określonym przez parametr SchemaFile .

Aby uzyskać więcej informacji, zobacz Schemat JSON.

Typ:String
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

String

Do tego polecenia cmdlet można przekazać ciąg JSON.

Dane wyjściowe

Boolean

To polecenie cmdlet zwraca $true wartość , jeśli kod JSON jest prawidłowy i w przeciwnym razie $false.

Uwagi

Od programu PowerShell 6 program PowerShell używa zestawów Newtonsoft.Json dla funkcji JSON. Implementacja rozwiązania Newtonsoft obejmuje kilka rozszerzeń standardu JSON, takich jak obsługa komentarzy i używanie pojedynczych cudzysłowów. Aby uzyskać pełną listę funkcji, zobacz dokumentację newtonsoft pod adresem https://www.newtonsoft.com/json.

Począwszy od programu PowerShell 7.4, Test-Json używa formatu System.Text.Json do analizowania plików JSON i JsonSchema.NET do sprawdzania poprawności schematu. Dzięki tym zmianom: Test-Json

  • Nie obsługuje już schematów wersji roboczej 4
  • Obsługuje tylko ściśle zgodny kod JSON

Aby uzyskać pełną listę różnic między plikiem Newtonsoft.Json i System.Text.Json, zobacz Tabela różnic w artykule Migrate from Newtonsoft.Json to System.Text.Json (Tabela różnic w artykule Migrate from Newtonsoft.Json to System.Text.Json).

Aby uzyskać więcej informacji na temat specyfikacji schematu JSON, zobacz dokumentację w JSON-Schema.org.