1.1 --- a/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java Fri Feb 07 07:44:34 2014 +0100
1.2 +++ b/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java Tue Jul 22 17:55:18 2014 +0200
1.3 @@ -123,43 +123,15 @@
1.4 final PushbackInputStream is = new PushbackInputStream(
1.5 conn.getInputStream(), 1
1.6 );
1.7 - boolean array = false;
1.8 - boolean string = false;
1.9 - if (call.isJSONP()) {
1.10 - for (;;) {
1.11 - int ch = is.read();
1.12 - if (ch == -1) {
1.13 - break;
1.14 - }
1.15 - if (ch == '[') {
1.16 - is.unread(ch);
1.17 - array = true;
1.18 - break;
1.19 - }
1.20 - if (ch == '{') {
1.21 - is.unread(ch);
1.22 - break;
1.23 - }
1.24 - }
1.25 - } else {
1.26 - int ch = is.read();
1.27 - if (ch == -1) {
1.28 - string = true;
1.29 - } else {
1.30 - array = ch == '[';
1.31 - is.unread(ch);
1.32 - if (!array && ch != '{') {
1.33 - string = true;
1.34 - }
1.35 - }
1.36 - }
1.37 + boolean[] arrayOrString = { false, false };
1.38 + detectJSONType(call.isJSONP(), is, arrayOrString);
1.39 try {
1.40 - if (string) {
1.41 + if (arrayOrString[1]) {
1.42 throw new JSONException("");
1.43 }
1.44 JSONTokener tok = createTokener(is);
1.45 Object obj;
1.46 - obj = array ? new JSONArray(tok) : new JSONObject(tok);
1.47 + obj = arrayOrString[0] ? new JSONArray(tok) : new JSONObject(tok);
1.48 json = convertToArray(obj);
1.49 } catch (JSONException ex) {
1.50 Reader r = new InputStreamReader(is, "UTF-8");
1.51 @@ -184,6 +156,34 @@
1.52 }
1.53 }
1.54
1.55 + private static void detectJSONType(boolean skipAnything, final PushbackInputStream is, boolean[] arrayOrString) throws IOException {
1.56 + for (;;) {
1.57 + int ch = is.read();
1.58 + if (ch == -1) {
1.59 + arrayOrString[1] = true;
1.60 + break;
1.61 + }
1.62 + if (Character.isWhitespace(ch)) {
1.63 + continue;
1.64 + }
1.65 +
1.66 + if (ch == '[') {
1.67 + is.unread(ch);
1.68 + arrayOrString[0] = true;
1.69 + break;
1.70 + }
1.71 + if (ch == '{') {
1.72 + is.unread(ch);
1.73 + break;
1.74 + }
1.75 + if (!skipAnything) {
1.76 + is.unread(ch);
1.77 + arrayOrString[1] = true;
1.78 + break;
1.79 + }
1.80 + }
1.81 + }
1.82 +
1.83 private static JSONTokener createTokener(InputStream is) throws IOException {
1.84 Reader r = new InputStreamReader(is, "UTF-8");
1.85 try {
1.86 @@ -252,8 +252,12 @@
1.87
1.88 public static Object parse(InputStream is) throws IOException {
1.89 try {
1.90 - JSONTokener t = createTokener(is);
1.91 - return new JSONObject(t);
1.92 + PushbackInputStream push = new PushbackInputStream(is, 1);
1.93 + boolean[] arrayOrString = { false, false };
1.94 + detectJSONType(false, push, arrayOrString);
1.95 + JSONTokener t = createTokener(push);
1.96 + Object obj = arrayOrString[0] ? new JSONArray(t) : new JSONObject(t);
1.97 + return convertToArray(obj);
1.98 } catch (JSONException ex) {
1.99 throw new IOException(ex);
1.100 }