【问题标题】:Generate JSON from map values从地图值生成 JSON
【发布时间】:2019-03-24 04:55:32
【问题描述】:

我已经写了一个方法,它以地图实体和位置为参数,使用杰克逊对象映射器

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 输出中?
  • 我需要那种类型的 JSON 输出 @Josh

标签: java json dictionary hashmap jackson


【解决方案1】:

请看下面的代码:

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

您可以为“事件”和“笔记”添加更多示例对象

【讨论】:

    【解决方案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&lt;String&gt; l = new ArrayList&lt;&gt;(); l.add("event"); e.synonyms = l;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多