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 に格納します。2 つのクラスを作成します。1 つはキーのリストと staticData を含み、もう 1 つはカテゴリのリストを含みます。クラス オブジェクトに値を設定し、1 つのリストを作成し、このクラスの 2 つのオブジェクトをリストに追加し、このリストを JSON にシリアル化します。

オブジェクトをJSON文字列に変換するために Gsonライブラリを使用しました。

ここにあなたが望むコードがあります。

データクラス:

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 に答える