将两个Map String组合成JSON

时间:2013-08-20 16:27:38

标签: java json

这是我所期望的JSON字符串:

{
    "startDate": "2013-01-01",
    "columns": "mode , event",
    "endDate": "2013-02-01",
    "selection": {
        "selectionMatch": "123456789012",
        "selectionType": "smart"
    }
}

这是JAVA代码,但我没有成功:

public static String BuildJson() throws JSONException{

    Map<String, String> map1 = new HashMap<String, String>();
    map1.put("startDate", "2013-01-01");
    map1.put("endDate", "2013-02-01");
    map1.put("columns", "mode , event");

    Map<String, String> map2 = new HashMap<String, String>();
    map2.put("selectionType", "smart");
    map2.put("selectionMatch", "123456789012");

    JSONArray ja2 = new JSONArray();
    ja2.put(map2);
    System.out.println(ja2.toString());

    map1.put("selection", ja2.toString());

    System.out.println();
    JSONArray ja = new JSONArray();
    ja.put(map1);
    System.out.println(ja.toString());

    return null;
}

挑战在于如何组合不在同一级别的两个地图字符串。 我的代码结果是:

[{"startDate":"2013-01-01","columns":"mode , event","endDate":"2013-02-01","selection":"[{\"selectionMatch\":\"123456789012\",\"selectionType\":\"smart\"}]"}]

有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

以下是您想要的代码,

public static String BuildJson() throws JSONException
    {

        JSONObject map1 = new JSONObject();
        map1.put("startDate", "2013-01-01");
        map1.put("endDate", "2013-02-01");
        map1.put("columns", "mode , event");

        JSONObject map2 = new JSONObject();

        map2.put("selectionType", "smart");
        map2.put("selectionMatch", "123456789012");

        map1.put("selection",map2);

        System.out.println(map1.toString());

        return null;

    }

输出将是

{
   "startDate":"2013-01-01",
   "columns":"mode , event",
   "endDate":"2013-02-01",
   "selection":{
      "selectionMatch":"123456789012",
      "selectionType":"smart"
   }
}

使用JSONObject而不是Map,如果你需要JSONArray,你也可以使用它。

答案 1 :(得分:2)

JSONObject object = new JSONObject(map1);
object.put('selection', map2);

System.out.println(object.toString());