Test-Json
Проверяет, является ли строка допустимым документом JSON
Синтаксис
Test-Json
[-Json] <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
[-Json] <String>
[-Schema] <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
[-Json] <String>
-SchemaFile <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
-Path <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
-Path <String>
[-Schema] <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
-Path <String>
-SchemaFile <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
-LiteralPath <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
-LiteralPath <String>
[-Schema] <String>
[-Options <String[]>]
[<CommonParameters>]
Test-Json
-LiteralPath <String>
-SchemaFile <String>
[-Options <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 |
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 |
-Options
По умолчанию Test-Json
не поддерживает JSON с комментариями или запятыми. Этот параметр позволяет указать параметры для изменения поведения по умолчанию. Доступны следующие параметры:
IgnoreComments
AllowTrailingCommas
Этот параметр был добавлен в PowerShell 7.5.0-preview.4.
Тип: | String[] |
Допустимые значения: | IgnoreComments, AllowTrailingCommas |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Path
Указывает путь к JSON-файлу. Этот командлет получает элемент в указанном расположении. Подстановочные знаки разрешены, но шаблон должен разрешаться в один файл.
Этот параметр добавлен в 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
возвращает $true
только в том случае, если входные данные JSON соответствуют схеме, определенной в файле, указанном параметром schemaFile.
Дополнительные сведения см. в разделе схемы JSON.
Тип: | String |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Строку JSON можно передать в этот командлет.
Выходные данные
Boolean
Этот командлет возвращает $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 для синтаксического анализа и JsonSchema.NET для проверки схемы.
В этих изменениях Test-Json
:
- Больше не поддерживает схемы Черновика 4
- Поддерживает только строго соответствующее JSON
Полный список различий между Newtonsoft.Json и System.Text.Json см. в таблице различий в миграции из Newtonsoft.Json в System.Text.Json.
Дополнительные сведения о спецификациях схемы JSON см. в документации по JSON-Schema.org.
Связанные ссылки
PowerShell