Генерация JSON из значений карты - PullRequest
0 голосов
/ 24 марта 2019

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

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"
        ]
    }
]

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

См. Код ниже:

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 "
    ]
}
]

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

0 голосов
/ 24 марта 2019

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

class Event {

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

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

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