Сравнение ключей двух JSON

131
20 ноября 2019, 17:40

Прошу помочь с такой задачей. Имеется json1, который является телом запроса к апи: {"key1":"value1","key2":"value2","key3":"value3"} и json2, являющийся телом ответа: {"key0":"value0","key1":"value1","key2":"value2","key3":"value3","key4":"value4"}. Требуется осуществить проверку: key1 и key3 из тела запроса должны содержаться в теле ответа.

Так же интересует, какие удобные библиотеки существуют для подобных сравнений. Спасибо!

Answer 1

Для таких целей можно использовать GSON:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>

Пример использования:

import com.google.gson.Gson;
public class Main {
    private static final String JSON_1 = "{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}";
    private static final String JSON_2 = "{\"key0\":\"value0\",\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\",\"key4\":\"value4\"}";
    class EntityOne {
        private String key1;
        private String key2;
        private String key3;
    }
    class EntityTwo {
        private String key0;
        private String key1;
        private String key2;
        private String key3;
        private String key4;
    }
    public static void main(String[] args) {
        Gson gson = new Gson();
        EntityOne one = gson.fromJson(JSON_1, EntityOne.class);
        EntityTwo two = gson.fromJson(JSON_2, EntityTwo.class);
        if (!one.key1.equalsIgnoreCase(two.key1)) {
            throw new AssertionError("JSON_1.key1 != JSON_2.key1");
        }
        if (!one.key1.equalsIgnoreCase(two.key3)) {
            throw new AssertionError("JSON_1.key1 != JSON_2.key3");
        }
    }
}

Вывод:

Exception in thread "main" java.lang.AssertionError: JSON_1.key1 != JSON_2.key3
    at Main.main(Main.java:29)

PS: Если не требуется создание новых классов, можно использовать Map

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class Main {
    private static final String JSON_1 = "{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}";
    private static final String JSON_2 = "{\"key0\":\"value0\",\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\",\"key4\":\"value4\"}";
    public static void main(String[] args) {
        Gson gson = new Gson();
        Type type = new TypeToken<Map<String, String>>(){}.getType();
        Map<String, String> one = gson.fromJson(JSON_1, type);
        Map<String, String> two = gson.fromJson(JSON_2, type);
        if (!one.get("key1").equalsIgnoreCase(two.get("key1"))) {
            throw new AssertionError("JSON_1.key1 != JSON_2.key1");
        }
        if (!one.get("key1").equalsIgnoreCase(two.get("key3"))) {
            throw new AssertionError("JSON_1.key1 != JSON_2.key3");
        }
    }
}
READ ALSO
Установить фон кнопки [дубликат]

Установить фон кнопки [дубликат]

На данный вопрос уже ответили:

134
Установить фон кнопке в виде xml файла

Установить фон кнопке в виде xml файла

Подскажите пожалуйста как мне можно присвоить фон кнопке фон в виде xml файла

119
DBUnit + Hibernate

DBUnit + Hibernate

У меня не работает простой пример с DBUnit

112
Почему не работает вывод картинок

Почему не работает вывод картинок

Почему выдает ошибку и не признает Graphics g? Из библиотеки привязалВсе прописал вроде

103