десериализовать Json в POJO

Я пытаюсь преобразовать следующую структуру JSON (часть более крупного объекта JSON) в POJO, но получаю исключение, скопированное ниже (с использованием Java/Jackson).

JSON

"outputKeys":
{"ABC":"gGyIioUr4Jfr5QiCm6Z==",
"DEF":"RxHfNyD2JyPOpG5tv3Jaj5g=="}  

Класс Java

    private class OutputKeys {

        private String key;
        private String value;

        public OutputKeys(String key, String value) {
            this.key = key;
            this.value = value;
        }
}

&

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonString, Test.class);

исключение:

no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?

Тестовый класс имеет атрибут OutputKeys.
Приветствуются любые предложения. Я также пробовал использовать List of OutputKeys.

Обновлять:

Я безуспешно пробовал следующее:

class OutputKeys {
public Map<String, String> keys;
///with constructor/setter/getters
}

&

class OutputKeys {
public List<OutputKey> keys;
///with constructor/setter/getters

   public class OutputKey {

        Map<String, String> outputs = new HashMap<>();
// tried this too:
// String key
//String value

}

person ali haider    schedule 17.03.2017    source источник
comment
Вы пытались создать конструктор по умолчанию (конструктор с аргументами) и, пожалуйста, не могли бы вы добавить код, который мы можем протестировать (основной класс и все связанные классы)   -  person JHDev    schedule 18.03.2017
comment
OutputKeys должен содержать Map<String, String> на основе примера JSON, нет?   -  person Mick Mnemonic    schedule 18.03.2017
comment
@MickMnemonic я пробовал это раньше, я получаю то же исключение   -  person ali haider    schedule 18.03.2017
comment
какими должны быть значения атрибутов одного экземпляра OutputKeys? это key="ABC", value="gGyIioUr4Jfr5QiCm6Z==" или это key="gGyIioUr4Jfr5QiCm6Z==", value="RxHfNyD2JyPOpG5tv3Jaj5g==" ?? другими словами, как вы сопоставляете карту с двумя входами в класс с двумя строками?   -  person Sharon Ben Asher    schedule 19.03.2017
comment
@SharonBenAsher имена ключей назначаются динамически, т. Е. В одном случае именами ключей могут быть ABC, в другом DEF и GHI, а в другом JKL и MNO и т. Д.   -  person ali haider    schedule 19.03.2017


Ответы (3)


Вам требуется только один класс, упомянутый ниже, содержащий

  1. Все ключи (ABC и DEF)
  2. геттеры/сеттеры
  3. toString(), который вы будете использовать для взаимодействия с JSON.

    открытый класс OutputKeys { частная строка ABC;

    private String DEF;
    
    public String getABC ()
    {
        return ABC;
    }
    
    public void setABC (String ABC)
    {
        this.ABC = ABC;
    }
    
    public String getDEF ()
    {
        return DEF;
    }
    
    public void setDEF (String DEF)
    {
        this.DEF = DEF;
    }
    
    @Override
    public String toString()
    {
        return "ClassPojo [ABC = "+ABC+", DEF = "+DEF+"]";
    }
    

    }

Дайте мне знать, если вам нужна дополнительная информация.

person Pratik Ambani    schedule 17.03.2017
comment
Кроме того, части ABC и DEF являются динамическими, а не статичными. - person ali haider; 18.03.2017

Поскольку ключи были динамическими, я закончил десериализацию данных с помощью итератора в JsonNode:

jsonNode.get("outputKeys").iterator() 

а затем получить соответствующую информацию о динамическом ключе через итератор.

person ali haider    schedule 22.03.2017

Мне нужен был аналогичный инструмент для NodeJS. Чтобы я мог писать тесты для частей более крупной модели, которая была сериализована (JSON).

Итак, если мне нужно только "ABC":"gGyIioUr4Jfr5QiCm6Z==" или "XYZ":{"Hello": "My String", "Content": [1,2,3]}, единственное свойство, которое я хочу проверить на данный момент это:

var sutXYX = { Hello: "My String", Content: [ 1, 2, 2]};

Я написал этот инструмент как утилиту https://github.com/whindes/PojoScriptifyFromJSON.

person whindes    schedule 02.05.2017