0

我有一个具有以下值的 multiMap:

a=1,b=2,c=3

我想用以下格式创建一个 JSON:

[{"data":["a","b","c"],"StaticData":"HELLO"},{"Categories":[1,2,3]}]

我正在尝试使用字符串缓冲区,但完全失去了如何只为键和值放置循环以及如何在两者之间插入一些静态数据。

我想我是否可以先创建一个字符串,然后以 json 格式解析,或者有没有其他方法可以形成 json?

4

1 回答 1

1

首先迭代您的 HashMap 以获取键和值并将其存储在 List 中。创建两个类,一个包含键列表和 staticData,另一个包含类别列表。在类对象中设置值,创建一个列表并将这两个类对象添加到列表中,并将此列表序列化为 JSON。

我已经使用Gson 库将 onvert 对象转换为 JSON 字符串。

这是您想要的代码。

数据类:

public class DataClass {
    private List<String> data;
    private String StaticData;  
    //your getter and setter method.
}  

类别类别:

public class CategoryClass {
   private List<String> Categories;  
   //your getter and setter method
}  

测试类:

public static void main(String[] args) {
    try{
        Map<String, String> map = new HashMap<String, String>();
        map.put("a", "1");
        map.put("b", "2");
        map.put("c", "3");

        List<Object> obj = new ArrayList<Object>();  


        List<String> keys = new ArrayList<String>();
        List<String> values = new ArrayList<String>();

        for(Entry<String, String> myMap : map.entrySet()){
            keys.add(myMap.getKey());
            values.add(myMap.getValue());
        }  

        DataClass dataObj = new DataClass();
        dataObj.setData(keys);
        dataObj.setStaticData("HELLO");
        obj.add(dataObj);

        CategoryClass catObj  = new CategoryClass();
        catObj.setCategories(values);
        obj.add(catObj);

        Gson gson = new Gson();  
        String jsonStr = gson.toJson(obj);
        System.out.println(jsonStr);
    }
    catch(Exception ex){
        ex.printStackTrace();
    }
}

输出 :

[{"data":["b","c","a"],"StaticData":"HELLO"},{"Categories":["2","3","1"]}]    

编辑 :

如果您需要维护 Map 中的插入顺序而不是使用LinkedHashMap,以便键和值的顺序与 Map 中的插入相同。

于 2014-03-05T06:42:07.920 回答