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.