private MetadataKey toMetadataKey(JsonElement jsonElement) { if (jsonElement.isJsonNull()) { return null; } JsonObject metadataKey = jsonElement.getAsJsonObject(); if (metadataKey.entrySet().isEmpty()) { return new NullMetadataKey(); } JsonElement id = metadataKey.get("id"); JsonElement displayName = metadataKey.get("displayName"); JsonElement partName = metadataKey.get("partName"); JsonElement childs = metadataKey.get("childs"); if (id != null && displayName != null && partName != null && childs != null) { MetadataKeyBuilder key = MetadataKeyBuilder.newKey(id.getAsString()) .withDisplayName(displayName.getAsString()) .withPartName(partName.getAsString()); childs.getAsJsonArray() .forEach(child -> key.withChild(toMetadataKey(child))); return key.build(); } return null; } }