Отсутствует мост между API-интерфейсами JSON-B и JSON?

Я пытаюсь реализовать функцию, которая применяет JSON-PATCH (RFC 6902) к объекту, аннотированному JSON-B.

Я пришел к следующему решению:

/**
 * Applies a JSON patch to a JSON-B annotated object, and returns a resulting patched version of the object.
 *
 * @param object the object to patch.
 * @param type the runtime type of the object to patch.
 * @param patch the patch to apply to the object.
 * @param <T> the generic type of the object to patch.
 * @return a patched version of the object.
 */
private <T> T patch(T object, Class<T> type, JsonArray patch) {
    JsonPatch jsonPatch = Json.createPatchBuilder(patch).build();
    Jsonb jsonb = JsonbBuilder.create();
    String jsonRepresentation = jsonb.toJson(object); // serialize the object into a JSON representation

    try (JsonReader jsonReader = Json.createReader(new StringReader(jsonRepresentation))) {
        return jsonb.fromJson(
            jsonPatch.apply(
                jsonReader.read() // deserialize the JSON representation into a JSON-P structure
            ).toString(), // apply the patch and serialize the resulting JSON-P structure into a JSON representation
            type
        ); // deserialize the JSON representation into the original form
    }
}

Проблема с этим подходом заключается в количестве сериализаций / десериализаций, которые происходят в процессе, не говоря уже о том, что реализация не является плавной.

Я что-то упустил в API, чтобы упростить реализацию этой функции исправления, или просто отсутствует мост между JSON-B и JSON, например:

jsonb.toJsonStructure(object); // would return a JSON Processing JsonStructure

0 ответов

Я вижу, что вы уже открыли усовершенствование репозитория JSON-B, но я все еще хотел задокументировать ответ здесь.

Нет, это невозможно с JSON-B 1.0, но я думаю, что это хорошая идея и улучшение, которое следует рассмотреть для будущей версии JSON-B.

Другие вопросы по тегам