A quick single-method JSON writer, intended to write Maps/Lists/Strings/Numbers/Booleans
(Object o)
| 133 | * A quick single-method JSON writer, intended to write Maps/Lists/Strings/Numbers/Booleans |
| 134 | */ |
| 135 | static String toString(Object o) { |
| 136 | if (o == null) { |
| 137 | return null; |
| 138 | } else if (o instanceof CharSequence) { |
| 139 | CharSequence s = (CharSequence)o; |
| 140 | StringBuilder sb = new StringBuilder(); |
| 141 | sb.append('"'); |
| 142 | for (int i=0;i<s.length();i++) { |
| 143 | char c = s.charAt(i); |
| 144 | if (c == '\n') { |
| 145 | sb.append("\\n"); |
| 146 | } else if (c == '\r') { |
| 147 | sb.append("\\r"); |
| 148 | } else if (c == '\t') { |
| 149 | sb.append("\\t"); |
| 150 | } else if (c == '"') { |
| 151 | sb.append("\\\""); |
| 152 | } else if (c == '\\') { |
| 153 | sb.append("\\\\"); |
| 154 | } else if (Character.isISOControl(c)) { // 0x00-0x1F, 0x80-0x9F |
| 155 | String t = Integer.toHexString(c); |
| 156 | sb.append("\\u"); |
| 157 | for (int j=t.length();j<4;j++) { |
| 158 | sb.append('0'); |
| 159 | } |
| 160 | sb.append(t); |
| 161 | } else { |
| 162 | sb.append(c); |
| 163 | } |
| 164 | } |
| 165 | sb.append('"'); |
| 166 | return sb.toString(); |
| 167 | } else if (o instanceof Map) { |
| 168 | Map<?,?> m = (Map<?,?>)o; |
| 169 | StringBuilder sb = new StringBuilder(); |
| 170 | sb.append('{'); |
| 171 | boolean first = true; |
| 172 | for (Map.Entry<?,?> e : m.entrySet()) { |
| 173 | if (!first) { |
| 174 | sb.append(','); |
| 175 | } |
| 176 | sb.append(toString((String)e.getKey())); |
| 177 | sb.append(':'); |
| 178 | sb.append(toString(e.getValue())); |
| 179 | first = false; |
| 180 | } |
| 181 | sb.append('}'); |
| 182 | return sb.toString(); |
| 183 | } else if (o instanceof List) { |
| 184 | List<?> l = (List<?>)o; |
| 185 | StringBuilder sb = new StringBuilder(); |
| 186 | sb.append('['); |
| 187 | boolean first = true; |
| 188 | for (Object p : l) { |
| 189 | if (!first) { |
| 190 | sb.append(','); |
| 191 | } |
| 192 | sb.append(toString(p)); |