Process array and null JSON values fx
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 18 Apr 2013 17:13:08 +0200
branchfx
changeset 1012b22c86471837
parent 1011 9cc253aa9405
child 1013 32502264b896
Process array and null JSON values
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java
javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Thu Apr 18 16:58:55 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Thu Apr 18 17:13:08 2013 +0200
     1.3 @@ -162,25 +162,33 @@
     1.4              }
     1.5              try {
     1.6                  URL u = new URL(base, url.replace(" ", "%20"));
     1.7 -                InputStream is = u.openStream();
     1.8 +                PushbackInputStream is = new PushbackInputStream(u.openStream(), 1);
     1.9 +                boolean array = false;
    1.10                  if (jsonp != null) {
    1.11 -                    PushbackInputStream pis = new PushbackInputStream(is, 1);
    1.12 -                    is = pis;
    1.13                      for (;;) {
    1.14 -                        int ch = pis.read();
    1.15 +                        int ch = is.read();
    1.16                          if (ch == -1) {
    1.17                              break;
    1.18                          }
    1.19 +                        if (ch == '[') {
    1.20 +                            is.unread(ch);
    1.21 +                            array = true;
    1.22 +                            break;
    1.23 +                        }
    1.24                          if (ch == '{') {
    1.25 -                            pis.unread(ch);
    1.26 +                            is.unread(ch);
    1.27                              break;
    1.28                          }
    1.29                      }
    1.30 +                } else {
    1.31 +                    int ch = is.read();
    1.32 +                    array = ch == '[';
    1.33 +                    is.unread(ch);
    1.34                  }
    1.35                  Reader r = new InputStreamReader(is, "UTF-8");
    1.36                  
    1.37                  JSONTokener tok = new JSONTokener(r);
    1.38 -                JSONObject obj = new JSONObject(tok);
    1.39 +                Object obj = array ? new JSONArray(tok) : new JSONObject(tok);
    1.40                  jsonResult[0] = convertToArray(obj);
    1.41              } catch (JSONException | IOException ex) {
    1.42                  jsonResult[0] = ex;
    1.43 @@ -229,7 +237,7 @@
    1.44              JSONObject obj = (JSONObject)jsonObject;
    1.45              for (int i = 0; i < props.length; i++) {
    1.46                  try {
    1.47 -                    values[i] = obj.get(props[i]);
    1.48 +                    values[i] = obj.has(props[i]) ? obj.get(props[i]) : null;
    1.49                  } catch (JSONException ex) {
    1.50                      LOG.log(Level.SEVERE, "Can't read " + props[i] + " from " + jsonObject, ex);
    1.51                  }
     2.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java	Thu Apr 18 16:58:55 2013 +0200
     2.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java	Thu Apr 18 17:13:08 2013 +0200
     2.3 @@ -17,7 +17,6 @@
     2.4   */
     2.5  package org.apidesign.bck2brwsr.htmlpage;
     2.6  
     2.7 -import java.util.Arrays;
     2.8  import java.util.Iterator;
     2.9  import org.apidesign.bck2brwsr.core.JavaScriptBody;
    2.10  import org.apidesign.bck2brwsr.htmlpage.api.OnReceive;
    2.11 @@ -38,7 +37,7 @@
    2.12   * @author Jaroslav Tulach <jtulach@netbeans.org>
    2.13   */
    2.14  @Page(xhtml = "Empty.html", className = "JSONik", properties = {
    2.15 -    @Property(name = "fetched", type = PersonImpl.class),
    2.16 +    @Property(name = "fetched", type = Person.class),
    2.17      @Property(name = "fetchedCount", type = int.class),
    2.18      @Property(name = "fetchedSex", type = Sex.class, array = true)
    2.19  })