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 (JSON) и может при необходимости проверить, что документ JSON соответствует предоставленной схеме.

Затем проверенную строку можно использовать с ConvertFrom-Json командлетом, преобразуемую в объект JSON, который легко управляется в PowerShell или отправляется в другую программу или веб-службу, которая обращается к входным данным JSON.

Многие веб-сайты используют нотацию JSON вместо XML для сериализации данных для взаимодействия между серверами и веб-приложениями.

Этот командлет впервые появился в 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 используется точно так же, как оно типизированно. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.

Этот параметр добавлен в PowerShell 7.4.

Тип:String
Aliases:PSPath, LP
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Path

Указывает путь к JSON-файлу. Этот командлет получает элемент в указанном расположении. Подстановочные знаки разрешены, но шаблон должен разрешаться в один файл.

Этот параметр добавлен в PowerShell 7.4.

Тип:String
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:True

-Schema

Указывает схему для проверки входных данных JSON. Если входные данные JSON соответствуют спецификации, указанной параметром схемы, Test-Json и возвращается $true только в том случае, если входные данные соответствуют предоставленной схеме.

Дополнительные сведения см. в схеме JSON.

Тип:String
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-SchemaFile

Указывает файл схемы, используемый для проверки входных данных JSON. При использовании возвращается $true только в том случае, Test-Json если входные данные JSON соответствуют схеме, определенной в файле, указанном параметром SchemaFile.

Дополнительные сведения см. в схеме JSON.

Тип:String
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

String

Строку JSON можно передать в этот командлет.

Выходные данные

Boolean

Этот командлет возвращает $true значение, если json является допустимым и в противном случае $false.

Примечания

Так как PowerShell 6, PowerShell использует сборки Newtonsoft.Json для функций JSON. Реализация Newtonsoft включает несколько расширений в стандарт JSON, например поддержку комментариев и использование отдельных кавычки. Полный список функций см. в документации https://www.newtonsoft.com/jsonпо Newtonsoft.

Начиная с PowerShell 7.4, Test-Json использует System.Text.Json для анализа JSON и JsonSchema.NET для проверки схемы. С этими изменениями: Test-Json

  • Больше не поддерживает схемы Черновика 4
  • Поддерживает только строго соответствующее JSON

Полный список различий между Newtonsoft.Json и System.Text.Json см. в таблице различий в миграции из Newtonsoft.Json в System.Text.Json.

Дополнительные сведения о спецификациях схемы JSON см. в документации по JSON-Schema.org.