У меня есть файл YAML, который я преобразую в JSON, а затем в объект Java, используя GSON .Это будет использоваться как стандартное определение, с которым я буду сравнивать другие файлы YAML.Файлы YAML, которые я буду проверять, должны содержать поля с структурами, идентичными моему определению.Однако вполне возможно, что он может содержать поля с другой структурой и поля, которые не существуют в моем определении, поскольку в конечном итоге пользователь должен создать эти поля до того, как я получу файл.Поле в проверяемом YAML может выглядеть следующим образом, с возможностью размещения столько уровней вложенности, сколько пользователь желает определить.
LBU:
type: nodes.Compute
properties:
name: LBU
description: LBU
configurable_properties:
test: {"additional_configurable_properties":{"aaa":"1"}}
vdu_profile:
min_number_of_instances: 1
max_number_of_instances: 4
capabilities:
virtual_compute:
properties:
virtual_memory:
virtual_mem_size: 8096 MB
virtual_cpu:
cpu_architecture: x86
num_virtual_cpu: 2
virtual_cpu_clock: 1800 MHz
requirements:
- virtual_storage:
capability: capabilities.VirtualStorage
node: LBU_Storage
В настоящее время я получаю этот файл YAML и преобразовываю его вJsonObject с Gson.Невозможно отобразить это на объект Java из-за возможных неизвестных полей.Моя цель состоит в том, чтобы просмотреть этот файл и проверить каждое поле на предмет соответствия в моем определении.Если присутствует поле, которое не существует в определении или существует, но имеет свойства, которые отличаются, мне нужно сообщить пользователю конкретную информацию о поле.
Пока я иду по пути получения таких полей.
for (String field : obj.get("topology_template").getAsJsonObject().get("node_template").getAsJsonObject().get(key).getAsJsonObject().get(
obj.get("topology_template").getAsJsonObject().get("node_templates").getAsJsonObject().get(key).getAsJsonObject().keySet().toArray()[i].toString()).getAsJsonObject().keySet()) {
Однако, кажется, что это довольно излишне и очень трудно следовать для некоторых глубоко вложенных полей.
Что я хочу знать, так это то, что существует более простой способ обхода каждого поля объекта JsonObject без сопоставления его с объектом Java и без явного доступа к каждому полю по имени?