如何在不同的JSON数组之间“拆分”Map值?

时间:2014-03-05 05:50:35

标签: java json string-building

我有一个包含以下值的multiMap:

  

A = 1,B = 2,C = 3

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

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

我正在尝试使用字符串缓冲区,但我完全失去了如何仅为键设置循环以及仅在数据库之间插入一些静态数据的方法。

我想如果我可以先创建一个字符串然后以json格式解析,还是有其他方法来形成json?

1 个答案:

答案 0 :(得分:1)

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

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

这是您想要的代码。

DataClass:

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

CategoryClass:

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

TestClass:

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();
    }
}

OutPut:

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

编辑:

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