У меня есть сценарий оболочки. в моем сценарии оболочки у меня есть команда, которая возвращает следующие данные в формате JSON.
{
"remoteIds": [
{
"remoteId": "[fd00:10:244:1:0:0:0:12]--(http://fd00-10-244-1--12.nspace.pod:8080)",
"requestsReceived": 1
}
}
я хочу проверить приведенный выше вывод с помощью шаблона json. в моем шаблоне json я могу указать порт, nspace, протокол (http) и RequestReceived. Как я могу разработать шаблон JSON и проверить его на соответствие данным JSON. я могу использовать скрипт jq и bash
Следующее будет шаблоном в моей голове
{
"remoteIds": [
{
"remoteId": "[*]--(http://*.nspace.pod:8080)",
"requestsReceived": 1
}
}
Спасибо
я добавил шаблон, какую бы информацию я не знал, например адрес ipv6, я поместил ее как * в шаблон
Если вы не хотите связываться с полноценной экосистемой определения общих схем и не против «развернуть свой собственный» механизм проверки, вы можете рассмотреть следующую иллюстрацию:
< input.json jq --slurpfile template template.json '
def validate($template):
($template | .remoteIds[0] | keys) as $keys
| (type == "object") and
(.remoteIds | type) == "array" and
all(.remoteIds[]; keys == $keys) and
all(.remoteIds[].remoteId;
test("^\\[.*\\]--[(]http://.*[.]nspace[.]pod:8080[)]$") )
;
validate($template[0])
'
Кстати, это работает со всеми тремя основными реализациями jq: стандартная реализация на основе C; гойк; и жак.
Вот как вы можете использовать инструмент проверки JESS для JSON.
(JESS означает расширенные структурные схемы JSON и относится к одновременно язык спецификации схемы и инструмент проверки. Домашняя страница на github находится по адресу https://github.com/pkoppstein/JESS)
Вы можете либо создать схему JESS вручную, либо создайте очень простую структурную схему, как описано ниже, а затем настроить его в соответствии с вашими требованиями. В любом случае, давайте предположим, что ваша структурная схема находится в файле с именем validate.schema и что это выглядит так:
{
"remoteIds": [
{
"remoteId": "/^\\[.*\\]--[(]http://.*[.]nspace[.]pod:8080[)]$/",
"requestsReceived": "number"
}
]
}
Не стесняйтесь настраивать приведенное выше регулярное выражение, да и всю схему, в соответствии с вашими требованиями.
Предполагая, что вы установили инструмент проверки JESS, вы можете запустить его следующим образом:
JESS --schema validate.schema input.json
Обратите внимание, что сценарий JESS сообщает только о несоответствиях. То есть он не выдает никаких результатов, если JSON соответствует схеме.
Чтобы автоматически создать базовую структурную схему, вы можете использовать «schema.jq». (https://gist.github.com/pkoppstein/a5abb4ebef3b0f72a6ed) вот так:
< input.json jq 'include "schema" {search: "."}; schema' > validate.schema
Пожалуйста, уточните, какой шаблон вы имеете в виду. Будет ли это соответствовать схеме JSON (json-schema.org)? Если да, подойдет ли один из инструментов проверки схемы JSON?