Сгенерировать JSON из значений карты

Я написал метод, который принимает объект карты и местоположение в качестве параметров, используя сопоставитель объектов Джексона.

public class EntityGenerator {
    private static void generatePartiallySearchableEntity(Map<String, Set<String>> synMap, String root_dir_loc) throws Exception {
    Set < String > namedEntitySet = null;
    synMap.put("severity", namedEntitySet);
    ObjectMapper mapperobj = new ObjectMapper();
    mapperobj.writeValue(new File(root_dir_loc), synMap);
    System.out.println("Test.json file created");
}

public static void main(String args[]) throws Exception {

    Map < String, Set < String >> sysMap = new HashMap<String, Set<String>>();
    Set < String > severityEntitySet = new HashSet<String>();
    severityEntitySet.add("Critical");
    severityEntitySet.add("Error ");
    severityEntitySet.add("Warning ");
    severityEntitySet.add("Information ");

    sysMap.put("Severity", severityEntitySet);

    Set < String > impactEntitySet = new HashSet<String>();
    impactEntitySet.add("Inciden");
    impactEntitySet.add("Risk");
    impactEntitySet.add("Event");

    sysMap.put("Imapct", impactEntitySet);

    String root_dir_loc = "C:\\Users\\rakshitm\\Documents\\test.json";

    generatePartiallySearchableEntity(sysMap, root_dir_loc);
}

Я получаю такой вывод JSON, как это отличается от того, что я ожидал от

{"severity":null,"Severity":["Error ","Information ","Critical","Warning "],"Imapct":["Inciden","Risk","Event"]}

Мне нужен вывод JSON этого типа

[
    {
        "value": "event",
        "synonyms": [
            "event"
        ]
    },
    {
        "value": "impact",
        "synonyms": [
            "impact"
        ]
    },
    {
        "value": "severity",
        "synonyms": [
            "severity"
        ]
    },
    {
        "value": "notes",
        "synonyms": [
            "notes"
        ]
    }
]

Строка «синонимы» даже не появляется в вашем коде. Как вы думаете, почему он появится в выводе JSON?

Josh 24.03.2019 06:14

Мне нужен такой тип вывода JSON @Josh

Brahmadev 24.03.2019 06:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
612
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужен Pojo следующей спецификации.

class Event {

  private String value;
  private List<String> synonyms;
}

Затем вы составляете список этого класса, и это будет правильно анализировать ваш Json.

List<Event> events = new ArrayList<>();

Вы просто заполняете класс, который я описал. Например, как показано ниже. Event e = new Event(); e.value = "event"; List<String> l = new ArrayList<>(); l.add("event"); e.synonyms = l;

Vinay Avasthi 24.03.2019 06:31
Ответ принят как подходящий

См. код ниже:

package com.abhi.learning.stackoverflow;

import java.util.List;

public class Example {

    private String value;
    private List<String> synonyms = null;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public List<String> getSynonyms() {
        return synonyms;
    }

    public void setSynonyms(List<String> synonyms) {
        this.synonyms = synonyms;
    }

}

Основной класс:

package com.abhi.learning.stackoverflow;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

/**
* Hello world!
*
*/
public class App 
{
    public static void main( String[] args )
    {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

        Example emp = new Example();
        ArrayList<String> al = new ArrayList<String>();
        al.add("Critical");
        al.add("Error ");
        al.add("Warning ");

        emp.setSynonyms(al);

        emp.setValue("Severity");


        Example emp1 = new Example();
        ArrayList<String> al1 = new ArrayList<String>();
        al1.add("Inciden");
        al1.add("Risk");
        al1.add("Event");

        emp1.setSynonyms(al1);

        emp1.setValue("Imapct");

        List<Example> lstEx = new ArrayList<Example>();
        lstEx.add(emp1);
        lstEx.add(emp);
        try {
            objectMapper.writeValue(new File("target/employee.json"), lstEx);
        } catch ( IOException e) {
            e.printStackTrace();
        } 
    }
}

Это json, который я получил:

    [
{
    "value":"Imapct",
    "synonyms":[
        "Inciden",
        "Risk",
        "Event"
    ]
},
{
    "value":"Severity",
    "synonyms":[
        "Critical",
        "Error ",
        "Warning "
    ]
}
]

Вы можете добавить больше примеров объектов для «событий» и «заметок».

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