Как добавить данные к свойству в Gson JsonObject? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть программа, которая возвращает метаданные активов в json.Пример кода:

com.google.gson.JsonObject assetMetadataJson = new JsonObject();
assetMetadataJson.addProperty(asset.getName(), new Gson().toJson(asset.getMetadata()));

Пример вывода для вышеупомянутого assetMetadataJson:

 {"icons8-java-50.png":"{\"dc:description\":[\"desc\"],\"dc:format\":\"image/png\"}"}

Нам нужно добавить больше деталей к тому же assetMetadataJson свойству объекта.И это у нас в качестве еще одной строки JSON.Например:

{"jcr:primaryType":"dam:Asset","jcr:isCheckedOut":true}

Как мы можем вставить / объединить две вышеупомянутые строки json в одну, чтобы результат был таким:

 {"icons8-java-50.png":"{\"dc:description\":[\"desc\"],\"dc:format\":\"image/png\"}","jcr:primaryType":"dam:Asset","jcr:isCheckedOut":true}

1 Ответ

0 голосов
/ 23 мая 2018

Ну, если у вас есть JsonElement объекты, это довольно просто:

private static JsonObject merge(final JsonObject jsonObject1, final JsonObject jsonObject2) {
    final JsonObject merged = new JsonObject();
    mergeInto(merged, jsonObject1);
    mergeInto(merged, jsonObject2);
    return merged;
}

private static void mergeInto(final JsonObject destination, final JsonObject source) {
    for ( final Map.Entry<String, JsonElement> e : source.entrySet() ) {
        destination.add(e.getKey(), e.getValue());
    }
}

Или в Java 8 Stream API:

private static JsonObject merge(final JsonObject jsonObject1, final JsonObject jsonObject2) {
    return Stream.concat(jsonObject1.entrySet().stream(), jsonObject2.entrySet().stream())
            .collect(toJsonObject());
}

private static Collector<Map.Entry<String, JsonElement>, ?, JsonObject> toJsonObject() {
    return Collector.of(
            JsonObject::new,
            (jsonObject, e) -> jsonObject.add(e.getKey(), e.getValue()),
            (jsonObject1, jsonObject2) -> {
                for ( final Map.Entry<String, JsonElement> e : jsonObject2.entrySet() ) {
                    jsonObject1.add(e.getKey(), e.getValue());
                }
                return jsonObject1;
            },
            Function.identity()
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...