Test-Json

文字列が有効な JSON ドキュメントであるかどうかをテストします

構文

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

説明

このコマンドレットは Test-Json 、文字列が有効な JavaScript Object Notation (JSON) ドキュメントであるかどうかをテストし、必要に応じて、指定されたスキーマに対してその JSON ドキュメントを検証できます。

検証済みの文字列は、コマンドレットで ConvertFrom-Json JSON 形式の文字列を JSON オブジェクトに変換して使用できます。JSON オブジェクトは、PowerShell で簡単に管理できます。また、JSON 入力にアクセスする別のプログラムまたは Web サービスに送信することもできます。

多くの Web サイトが、サーバーと Web ベースのアプリ間の通信のために、XML ではなく JSON を使用してデータをシリアル化しています。

このコマンドレットは、PowerShell 6.1 で導入されました

例 1: オブジェクトが有効な JSON であるかどうかをテストする

この例では、入力文字列が有効な JSON ドキュメントであるかどうかをテストします。

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

True

例 2: 指定されたスキーマに対してオブジェクトをテストする

この例では、JSON スキーマを含む文字列を受け取り、それを入力文字列と比較します。

$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

この例では、スキーマには有効期間の整数が必要ですが、テストした JSON 入力では代わりに文字列値が使用されるため、エラーが発生します。

詳細については、「JSON スキーマ」を参照してください

例 3: ファイルのスキーマに対してオブジェクトをテストする

JSON スキーマでは、キーワード (keyword)を使用して定義を$ref参照できます。 別の $ref ファイルを参照する URI に解決できます。 SchemaFile パラメーターは、JSON スキーマ ファイルへのリテラル パスを受け入れ、JSON ファイルをそのようなスキーマに対して検証できるようにします。

この例では、ファイルが参照していますschema.jsondefinitions.json

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

詳細については、「複雑なスキーマの構築」を参照してください

パラメーター

-Json

有効性をテストする JSON 文字列を指定します。 文字列が格納されている変数を入力するか、文字列を取得するコマンドまたは式を入力します。 文字列 Test-Jsonをパイプして .

Json パラメーターが必要です。

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

JSON ファイルへのパスを指定します。 LiteralPath値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

このパラメーターは PowerShell 7.4 で追加されました。

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Path

JSON ファイルへのパスを指定します。 このコマンドレットは、指定した場所にある項目を取得します。 ワイルドカード文字は許可されますが、パターンは 1 つのファイルに解決する必要があります。

このパラメーターは PowerShell 7.4 で追加されました。

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-Schema

JSON 入力を検証するスキーマを指定します。 渡された場合、 Test-Json JSON 入力が Schema パラメーターで指定された仕様に準拠していることを検証し、入力が指定されたスキーマに準拠している場合にのみ返$trueします。

詳細については、「JSON スキーマ」を参照してください

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SchemaFile

JSON 入力の検証に使用するスキーマ ファイルを指定します。 使用すると、JSON 入力が Test-Json SchemaFile パラメーターで指定されたファイルで定義されているスキーマに準拠している場合にのみ返$trueされます。

詳細については、「JSON スキーマ」を参照してください

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

String

JSON 文字列をこのコマンドレットにパイプできます。

出力

Boolean

このコマンドレットは、 $true JSON が有効かどうかを返します。それ以外の場合 $falseは返されます。

メモ

PowerShell 6 以降、PowerShell は JSON 関数に Newtonsoft.Json アセンブリを使用します。 Newtonsoft の実装には、コメントのサポートや単一引用符の使用など、JSON 標準のいくつかの拡張機能が含まれています。 機能の完全な一覧については、Newtonsoft のドキュメント https://www.newtonsoft.com/jsonを参照してください。

PowerShell 7.4 以降では、JSON の解析に System.Text.Json を使用Test-Jsonスキーマ検証に JsonSchema.NET します。 これらの変更により、次のようになります Test-Json

  • Draft 4 スキーマはサポートされなくなりました
  • 厳密に準拠した JSON のみをサポートします

Newtonsoft.Json と System.Text.Json の違いの完全な一覧については、「Newtonsoft.Json から System.Text.Json への移行」の相違点の表を参照してください

JSON スキーマの仕様の詳細については、JSON-Schema.org のドキュメントを参照してください。