Поиск по сайту:

Test-Json (Microsoft.PowerShell.Utility)


Test-Json

Модуль:
Microsoft.PowerShell.Utility

Проверяет, является ли строка действительным документом 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 в объект 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

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-LiteralPath

Указывает путь к файлу JSON. Значение LiteralPath используется точно так, как оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки сообщают PowerShell не интерпретировать никакие символы как escape-последовательности.

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

Тип :

String

Псевдонимы:

PSPath, LP

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Path

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

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

Тип :

String

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

True

-Schema

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

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

Тип :

String

Позиция:

1

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-SchemaFile

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

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

Тип :

String

Позиция:

1

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Строка

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

Выходы

Логическое значение

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

Примечания

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

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

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

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

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