將java.util.Map轉換為格式化json__js

來源:互聯網
上載者:User
<pre name="code" class="java">import java.text.SimpleDateFormat;import java.util.Map;import java.util.Set;public class ConvertMap2Json{private static final String QUOTE = "\"";/** * 將Map轉成一個json對象,即像大括弧的東西 * e.g. * { * "eventName": "name" * } * * @param body * @param tabCount * @param addComma * @return */public static String buildJsonBody(Map<String, Object> body, int tabCount, boolean addComma){StringBuilder sbJsonBody = new StringBuilder();sbJsonBody.append("{\n");Set<String> keySet = body.keySet();int count = 0;int size = keySet.size();for (String key : keySet){count++;sbJsonBody.append(buildJsonField(key, body.get(key), tabCount + 1, count != size));}sbJsonBody.append(getTab(tabCount));sbJsonBody.append("}");return sbJsonBody.toString();}/** * 產生一個json欄位即像這樣的 * e.g. * "eventName": "aaa" * * @param key * @param value * @param tabCount * @param addComma * @return */private static String buildJsonField(String key, Object value, int tabCount, boolean addComma){StringBuilder sbJsonField = new StringBuilder();sbJsonField.append(getTab(tabCount));sbJsonField.append(QUOTE).append(key).append(QUOTE).append(": ");sbJsonField.append(buildJsonValue(value, tabCount, addComma));return sbJsonField.toString();}/** * 產生json值對象 * e.g. * "string" * 或 * { * "key": "value" * } * * @param value * @param tabCount * @param addComma * @return */private static String buildJsonValue(Object value, int tabCount, boolean addComma){StringBuilder sbJsonValue = new StringBuilder();if (value instanceof String){sbJsonValue.append(QUOTE).append(value).append(QUOTE);}else if (value instanceof Integer || value instanceof Long || value instanceof Double){sbJsonValue.append(value);}else if (value instanceof java.util.Date){sbJsonValue.append(QUOTE).append(formatDate((java.util.Date) value)).append(QUOTE);}else if (value.getClass().isArray() || value instanceof java.util.Collection){sbJsonValue.append(buildJsonArray(value, tabCount, addComma));}else if (value instanceof java.util.Map){sbJsonValue.append(buildJsonBody((java.util.Map) value, tabCount, addComma));}sbJsonValue.append(buildJsonTail(addComma));return sbJsonValue.toString();}/** * 產生json數組對象 * [ * "value" * ] * 或 * [ * { * "key": "value" * } * ] * * @param value * @param tabCount * @param addComma * @return */private static String buildJsonArray(Object value, int tabCount, boolean addComma){StringBuilder sbJsonArray = new StringBuilder();sbJsonArray.append("[\n");Object[] objArray = null;if (value.getClass().isArray()){objArray = (Object[]) value;}else if (value instanceof java.util.Collection)//將集合類改為對象數組{objArray = ((java.util.Collection) value).toArray();}int size = objArray.length;int count = 0;//迴圈數組裡的每一個對象for (Object obj : objArray){//加上縮排,比上一行要多一個縮排sbJsonArray.append(getTab(tabCount + 1));//加上對象值,比如一個字串"String",或者一個對象sbJsonArray.append(buildJsonValue(obj, tabCount + 1, ++count != size));}sbJsonArray.append(getTab(tabCount));sbJsonArray.append("]");return sbJsonArray.toString();}/** * 加上縮排,即幾個\t * TODO. * * @param count * @return */private static String getTab(int count){StringBuilder sbTab = new StringBuilder();while (count-- > 0){sbTab.append("\t");}return sbTab.toString();}/** * 加上逗號 * TODO. * * @param addComma * @return */private static String buildJsonTail(boolean addComma){return addComma ? ",\n" : "\n";}/** * 格式化日期 * TODO. * * @param date * @return */private static String formatDate(java.util.Date date){return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}}


 
<pre name="code" class="java">import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.junit.Test;public class TestConvertMap2Json{@Testpublic void test(){Map<String, Object> data = initData();System.out.println(ConvertMap2Json.buildJsonBody(data, 0, false));}private static Map<String, Object> initData(){Map<String, Object> map = new HashMap<String, Object>();map.put("eventName", "ApplicationDetailUpdateAfter");map.put("source", "11111-22222-33333");map.put("age", 123.333);Map<String, String> paramMap = new HashMap<String, String>();map.put("parameters", paramMap);paramMap.put("recordId", "REC14-00000-00013");paramMap.put("recordType", "ggg-aaa-cc-dd");List<String> countryList = new ArrayList<String>();map.put("country", countryList);countryList.add("China");countryList.add("USA");List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();map.put("mapList", mapList);Map<String, Object> tempMap = new HashMap<String, Object>();tempMap.put("name", "zzz");tempMap.put("nick", "ttt");mapList.add(tempMap);return map;}}


 

{"mapList": [{"nick": "ttt","name": "zzz"}],"source": "11111-22222-33333","age": 123.333,"eventName": "ApplicationDetailUpdateAfter","parameters": {"recordId": "REC14-00000-00013","recordType": "ggg-aaa-cc-dd"},"country": ["China","USA"]}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.