/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; /** * * @author ab, mg */ public class JsonUtils { public static StringBuilder s(String aValue) { StringBuilder sb = new StringBuilder(); String sValue = aValue == null ? null : aValue.replace("\\", "\\\\").replace("\"", "\\\"").replace("\t", "\\t").replace("\r", "").replace("\n", "\\n"); if (sValue == null) { sb.append("null"); } else { sb.append("\"").append(sValue).append("\""); } return sb; } public static StringBuilder p(String aPropName, String aPropValue) { StringBuilder sb = new StringBuilder(); return sb.append("\"").append(aPropName).append("\"").append(":").append(aPropValue); } public static StringBuilder p(StringBuilder aPropName, StringBuilder aPropValue) { StringBuilder sb = new StringBuilder(); return sb.append("\"").append(aPropName).append("\"").append(":").append(aPropValue); } public static StringBuilder o(String... aValues) { StringBuilder sb = new StringBuilder(); assert aValues != null && aValues.length % 2 == 0; sb.append("{"); for (int i = 0; i < aValues.length; i += 2) { if (i > 0) { sb.append(","); } sb.append(p(aValues[i], aValues[i + 1])); } sb.append("}"); return sb; } public static StringBuilder o(StringBuilder... aValues) { StringBuilder sb = new StringBuilder(); assert aValues != null && aValues.length % 2 == 0; sb.append("{"); for (int i = 0; i < aValues.length; i += 2) { if (i > 0) { sb.append(","); } sb.append(p(aValues[i], aValues[i + 1])); } sb.append("}"); return sb; } public static StringBuilder a(String... aValues) { assert aValues != null; StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < aValues.length; i++) { if (i > 0) { sb.append(","); } sb.append(aValues[i]); } sb.append("]"); return sb; } public static StringBuilder as(String... aValues) { assert aValues != null; StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < aValues.length; i++) { if (i > 0) { sb.append(","); } sb.append(s(aValues[i])); } sb.append("]"); return sb; } public static StringBuilder a(StringBuilder... aValues) { assert aValues != null; StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < aValues.length; i++) { if (i > 0) { sb.append(","); } sb.append(aValues[i]); } sb.append("]"); return sb; } public static StringBuilder as(StringBuilder... aValues) { assert aValues != null; StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < aValues.length; i++) { if (i > 0) { sb.append(","); } sb.append(s(aValues[i].toString())); } sb.append("]"); return sb; } public static String v(Object aValue) throws Exception { if (aValue != null) { if (aValue instanceof Boolean) { return aValue.toString(); } else if (aValue instanceof Number) { return StringUtils.formatDouble(((Number) aValue).doubleValue()); } else if (aValue instanceof String) { return JsonUtils.s((String) aValue).toString(); } else if (aValue instanceof Date) { SimpleDateFormat sdf = new SimpleDateFormat(RowsetJsonConstants.DATE_FORMAT); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); return JsonUtils.s(sdf.format((Date) aValue)).toString(); } else { throw new Exception("Value of unknown or unsupported type found! It's class is: " + aValue.getClass().getName()); } } else { return "null"; } } public static Object toValue(String aJson) throws Exception { if (aJson != null && !aJson.isEmpty()) { if ("true".equals(aJson)) { return true; } else if ("false".equals(aJson)) { return false; } else if ("null".equals(aJson)) { return null; } else if (aJson.matches("\"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\"")) {// date SimpleDateFormat sdf = new SimpleDateFormat(RowsetJsonConstants.DATE_FORMAT); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); return sdf.parse(aJson.substring(1, aJson.length() - 1)); } else if (aJson.matches("\".*\"")) { return jsonUnescape(aJson); } else { return Double.valueOf(aJson); } } else { return null; } } public static String jsonUnescape(String aJson) { // string String unescapesQuotes = aJson.substring(1, aJson.length() - 1).replace("\\\"", "\""); String unescapesSlashes = unescapesQuotes.replace("\\\\", "\\"); return unescapesSlashes; } }