annotate artifacts-common/src/main/java/de/intevation/artifacts/common/utils/JSON.java @ 381:bed51de8ae58

Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services. artifacts/trunk@4270 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 18 Apr 2012 17:10:10 +0000
parents
children 823752e3d392
rev   line source
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.artifacts.common.utils;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import java.util.Map;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 import java.util.LinkedHashMap;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import java.util.List;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 import java.util.ArrayList;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 import java.util.Iterator;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 import java.io.IOException;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 import java.io.PushbackInputStream;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import java.io.InputStream;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 import java.io.PrintWriter;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import java.io.ByteArrayInputStream;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import java.nio.charset.Charset;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import java.nio.charset.UnsupportedCharsetException;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 public final class JSON
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 private JSON() {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 private static final boolean isDigit(int c) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 return c >= '0' && c <= '9';
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 public static final boolean isWhitespace(int c) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 return c == ' ' || c == '\n' || c == '\r'
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 || c == '\t' || c == '\f';
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 private static final void match(int c, int x) throws IOException {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 if (c != x) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 throw new IOException(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 "Expecting '" + (char)c + "' found '" + (char)x + "'");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 private static final int eof(InputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 int c = in.read();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 if (c == -1) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 throw new IOException("EOF unexpected.");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 return c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 private static final int whitespace(InputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 int c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 while (isWhitespace(c = eof(in)));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 return c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 private static final int parseHex(String hex) throws IOException {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 try {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 return Integer.parseInt(hex, 16);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 catch (NumberFormatException nfe) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 throw new IOException("'" + hex + "' is not a hex string.");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 public static final String jsonString(String string) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 StringBuilder sb = new StringBuilder(string.length()+2);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 sb.append('"');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 for (int i = 0, N = string.length(); i < N; ++i) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 char c = string.charAt(i);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 switch (c) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 case '"': sb.append("\\\""); break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 case '\t': sb.append("\\t"); break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 case '\r': sb.append("\\r"); break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 case '\n': sb.append("\\n"); break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 case '\b': sb.append("\\b"); break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 case '\f': sb.append("\\f"); break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 default:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 if (c >= 128) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 sb.append("\\u");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 String hex = Integer.toHexString((int)c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 for (int j = 4-hex.length(); j > 0; --j) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 sb.append('0');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 sb.append(hex);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89 else {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 sb.append(c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 sb.append('"');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 return sb.toString();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 public static void write(PrintWriter out, Map<String, Object> map) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 writeObject(out, map);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 private static void writeValue(PrintWriter out, Object value) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 if (value instanceof Map) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 writeObject(out, (Map)value);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 else if (value instanceof List) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 writeList(out, (List)value);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 else if (value instanceof Number) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 out.print(value);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 else if (value instanceof Boolean) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 out.print(((Boolean)value) ? "true" : "false");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 else if (value == null) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 out.print("null");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
121 else {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 out.print(jsonString(value.toString()));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 private static void writeObject(PrintWriter out, Map map) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 out.print('{');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 Iterator iter = map.entrySet().iterator();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 while (iter.hasNext()) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 Map.Entry entry = (Map.Entry)iter.next();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 out.print(jsonString(entry.getKey().toString()));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 out.print(':');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 writeValue(out, entry.getValue());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 if (iter.hasNext()) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 out.print(',');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 out.print('}');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 private static void writeList(PrintWriter out, List list) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 out.print('[');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 Iterator iter = list.iterator();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 while (iter.hasNext()) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 writeValue(out, iter.next());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 if (iter.hasNext()) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 out.print(',');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 out.print(']');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 public static Map<String, Object> parse(String in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 return parse(asInputStream(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 private static InputStream asInputStream(String in) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 byte [] bytes;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162 try {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 bytes = in.getBytes(Charset.forName("US-ASCII"));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165 catch (UnsupportedCharsetException uce) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166 // Should not happen.
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
167 bytes = in.getBytes();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 return new ByteArrayInputStream(bytes);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 public static Map<String, Object> parse(InputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175 return parseObject(new PushbackInputStream(in, 1));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
176 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
177
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 public static Map<String, Object> parse(PushbackInputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 return parseObject(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
184 private static final String parseString(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185 PushbackInputStream in
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186 )
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
188 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189 StringBuilder sb = new StringBuilder();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 int mode = 0;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193 char [] hex = new char[4];
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
195 match('"', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
196
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
197 OUT: for (int c = eof(in);; c = eof(in)) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
198
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199 switch (mode) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200 case 0:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 if (c == '"') {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 break OUT;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 if (c == '\\') {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205 mode = 1;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207 else {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208 sb.append((char)c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211 case 1:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
212 switch (c) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213 case 'u':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214 mode = 2;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
215 continue;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
216 case 'b':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
217 sb.append('\b');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
218 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
219 case 'f':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 sb.append('\f');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222 case 'n':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
223 sb.append('\n');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
225 case 'r':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
226 sb.append('\r');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 case 't':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229 sb.append('\t');
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231 default:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
232 sb.append((char)c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
234 mode = 0;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
235 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
236 case 2:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
237 hex[0] = (char)c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238 mode = 3;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
239 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
240 case 3:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241 hex[1] = (char)c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242 mode = 4;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244 case 4:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 hex[2] = (char)c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246 mode = 5;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248 case 5:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 hex[3] = (char)c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 sb.append((char)parseHex(new String(hex)));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 mode = 0;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255 return sb.toString();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
257
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
258 private static final Boolean parseTrue(InputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
259 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
260 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 match('t', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
262 match('r', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
263 match('u', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
264 match('e', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
265 return Boolean.TRUE;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
266 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
267
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268 private static final Boolean parseFalse(InputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
270 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
271 match('f', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
272 match('a', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
273 match('l', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
274 match('s', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275 match('e', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 return Boolean.FALSE;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
278
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
279 private static final Object parseNull(InputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 match('n', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
283 match('u', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
284 match('l', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
285 match('l', eof(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
286 return null;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
287 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
288
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289 private static final Number parseNumber(PushbackInputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
292 StringBuilder sb = new StringBuilder();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
293
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 boolean isInteger = true;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296 int c;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
297 OUT: for (;;) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
298 switch (c = eof(in)) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
299 case '0': case '1': case '2': case '3': case '4':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
300 case '5': case '6': case '7': case '8': case '9':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
301 case '-': case '+':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302 sb.append((char)c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
304 case '.': case 'e': case 'E':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
305 isInteger = false;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 sb.append((char)c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
307 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
308 default:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
309 in.unread(c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
310 break OUT;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
311 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
312 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
313
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
314 try {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
315 if (isInteger) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
316 return sb.length() > 9
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
317 ? (Number)Long .valueOf(sb.toString())
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 : (Number)Integer.valueOf(sb.toString());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
319 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 return (Number)Double.valueOf(sb.toString());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
321 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
322 catch (NumberFormatException nfe) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
323 throw new IOException("Not a number '" + sb + "'");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
324 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
325 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
326
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
327 private static List<Object> parseList(PushbackInputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
328 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 List<Object> list = new ArrayList<Object>();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
331 match('[', whitespace(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
332 int c = whitespace(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
333 if (c == ']') {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
334 return list;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
337 for (;; c = whitespace(in)) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
338 Object value;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
339 in.unread(c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
340 switch (c) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
341 case '{':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
342 value = parseObject(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
343 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
344 case '[':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
345 value = parseList(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
346 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
347 case '"':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
348 value = parseString(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
349 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
350 case 't':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
351 value = parseTrue(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
352 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
353 case 'f':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
354 value = parseFalse(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
355 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
356 case 'n':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
357 value = parseNull(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
358 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
359 default:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
360 value = parseNumber(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
361 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
362 list.add(value);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
363
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
364 if ((c = whitespace(in)) == ']') break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
365 match(',', c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
366 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
367 return list;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
368 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
369
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
370 private static void parsePair(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
371 PushbackInputStream in,
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
372 Map<String, Object> pairs
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
373 )
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
374 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
375 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
376 in.unread(whitespace(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
377 String string = parseString(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
378 match(':', whitespace(in));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
379
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
380 Object value;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
382 int c = whitespace(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
383 in.unread(c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
384 switch (c) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
385 case '{':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
386 value = parseObject(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
387 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
388 case '[':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
389 value = parseList(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
390 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
391 case '"':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
392 value = parseString(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
393 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
394 case 't':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
395 value = parseTrue(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
396 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
397 case 'f':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
398 value = parseFalse(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
399 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
400 case 'n':
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
401 value = parseNull(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
402 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
403 default:
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
404 value = parseNumber(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
405 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
406 pairs.put(string, value);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
407 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
408
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
409 private static Map<String, Object> parseObject(PushbackInputStream in)
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
410 throws IOException
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
411 {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
412 Map<String, Object> pairs = new LinkedHashMap<String, Object>();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
413
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
414 int c = whitespace(in);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
415 match('{', c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
416
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
417 if ((c = whitespace(in)) == '}') {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
418 return pairs;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
419 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
420
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
421 in.unread(c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
422
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
423 for (;;) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
424 parsePair(in, pairs);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
425
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
426 if ((c = whitespace(in)) == '}') {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
427 break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
428 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
429
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430 if (c == '}') break;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
431 match(',', c);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
432 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
433
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
434 return pairs;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
435 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
436 }

http://dive4elements.wald.intevation.org