다음을 통해 공유


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

Description

cmdlet은 Test-Json 문자열이 유효한 JSON(JavaScript Object Notation) 문서인지 여부를 테스트하고 제공된 스키마에 대해 JSON 문서를 선택적으로 확인할 수 있습니다.

그런 다음 확인된 문자열을 cmdlet과 함께 ConvertFrom-Json 사용하여 JSON 형식 문자열을 JSON 개체로 변환할 수 있습니다. 이 개체는 PowerShell에서 쉽게 관리되거나 JSON 입력에 액세스하는 다른 프로그램 또는 웹 서비스로 전송됩니다.

많은 웹 사이트에서는 XML 대신 JSON을 사용하여 서버와 웹 기반 앱 간의 통신을 위해 데이터를 직렬화합니다.

이 cmdlet은 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 스키마는 키워드를 사용하여 $ref 정의를 참조할 수 있습니다. 다른 $ref 파일을 참조하는 URI로 확인할 수 있습니다. SchemaFile 매개 변수는 JSON 스키마 파일에 대한 리터럴 경로를 허용하고 이러한 스키마에 대해 JSON 파일의 유효성을 검사할 수 있도록 합니다.

이 예제에서 파일은 .를 schema.json 참조합니다.definitions.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 매개 변수가 필요합니다.

형식:String
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-LiteralPath

JSON 파일의 경로를 지정합니다. LiteralPath값은 입력된 대로 정확하게 사용됩니다. 와일드카드로 해석되는 문자는 없습니다. 경로에 이스케이프 문자가 포함된 경우 작은따옴표로 묶습니다. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.

이 매개 변수는 PowerShell 7.4에 추가되었습니다.

형식:String
별칭:PSPath, LP
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Path

JSON 파일의 경로를 지정합니다. 이 cmdlet은 지정된 위치에 있는 항목을 가져옵니다. 와일드카드 문자는 허용되지만 패턴은 단일 파일로 확인되어야 합니다.

이 매개 변수는 PowerShell 7.4에 추가되었습니다.

형식:String
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:True

-Schema

JSON 입력의 유효성을 검사할 스키마를 지정합니다. 전달된 Test-Json 경우 JSON 입력이 스키마 매개 변수로 지정된 사양을 준수하는지 확인하고 입력이 제공된 스키마 를 준수하는 경우에만 반환 $true 합니다.

자세한 내용은 JSON 스키마를 참조하세요.

형식:String
Position:1
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SchemaFile

JSON 입력의 유효성을 검사하는 데 사용되는 스키마 파일을 지정합니다. 사용되는 Test-Json 경우 JSON 입력이 SchemaFile 매개 변수로 지정된 파일에 정의된 스키마를 준수하는 경우에만 반환 $true 됩니다.

자세한 내용은 JSON 스키마를 참조하세요.

형식:String
Position:1
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

String

JSON 문자열을 이 cmdlet으로 파이프할 수 있습니다.

출력

Boolean

이 cmdlet은 JSON이 유효한지, 그렇지 않으면 $false반환 $true 합니다.

참고

PowerShell 6부터 PowerShell은 JSON 함수에 Newtonsoft.Json 어셈블리를 사용합니다. Newtonsoft의 구현에는 주석 지원 및 작은따옴표 사용과 같은 JSON 표준에 대한 여러 확장이 포함되어 있습니다. 기능의 전체 목록은 Newtonsoft 설명서를 참조하세요 https://www.newtonsoft.com/json.

PowerShell 7.4 Test-Json 부터 JSON 구문 분석 및 스키마 유효성 검사에 JsonSchema.NET System.Text.Json을 사용합니다. 이러한 변경 내용으로 다음을 수행합니다. Test-Json

  • 더 이상 초안 4 스키마를 지원하지 않음
  • 엄격하게 준수되는 JSON만 지원합니다.

Newtonsoft.Json과 System.Text.Json 간의 차이점에 대한 전체 목록은 Newtonsoft.Json에서 System.Text.Json으로 마이그레이션의 차이점 표를 참조하세요.

JSON 스키마 사양에 대한 자세한 내용은 JSON-Schema.org 설명서를 참조하세요.