toString really produces JSON
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 22 Apr 2013 21:19:58 +0200
changeset 18e4fc249046cf
parent 17 b3a45f840583
child 19 744b2ae904f8
toString really produces JSON
json/src/main/java/org/apidesign/html/json/impl/JSON.java
json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java
json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java
     1.1 --- a/json/src/main/java/org/apidesign/html/json/impl/JSON.java	Mon Apr 22 21:12:16 2013 +0200
     1.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/JSON.java	Mon Apr 22 21:19:58 2013 +0200
     1.3 @@ -32,8 +32,23 @@
     1.4      public static void extract(Object value, String[] props, Object[] values) {
     1.5      }
     1.6  
     1.7 -    public static Object toJSON(Object prop_firstName) {
     1.8 -        return null;
     1.9 +    public static Object toJSON(Object value) {
    1.10 +        if (value == null) {
    1.11 +            return "null";
    1.12 +        }
    1.13 +        if (value instanceof Enum) {
    1.14 +            value = value.toString();
    1.15 +        }
    1.16 +        if (value instanceof String) {
    1.17 +            return '"' + 
    1.18 +                ((String)value).
    1.19 +                    replace("\"", "\\\"").
    1.20 +                    replace("\n", "\\n").
    1.21 +                    replace("\r", "\\r").
    1.22 +                    replace("\t", "\\t")
    1.23 +                + '"';
    1.24 +        }
    1.25 +        return value.toString();
    1.26      }
    1.27  
    1.28      public static String toString(Object obj, String prop) {
     2.1 --- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java	Mon Apr 22 21:12:16 2013 +0200
     2.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java	Mon Apr 22 21:19:58 2013 +0200
     2.3 @@ -955,7 +955,8 @@
     2.4          String sep = "";
     2.5          for (Prprt p : props) {
     2.6              w.write(sep);
     2.7 -            w.append("    sb.append(\"" + p.name() + ": \");\n");
     2.8 +            w.append("    sb.append('\"').append(\"" + p.name() + "\")");
     2.9 +                w.append(".append('\"').append(\":\");\n");
    2.10              w.append("    sb.append(org.apidesign.html.json.impl.JSON.toJSON(prop_");
    2.11              w.append(p.name()).append("));\n");
    2.12              sep =    "    sb.append(',');\n";
     3.1 --- a/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java	Mon Apr 22 21:12:16 2013 +0200
     3.2 +++ b/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java	Mon Apr 22 21:19:58 2013 +0200
     3.3 @@ -71,6 +71,7 @@
     3.4          
     3.5          People people = new People(c);
     3.6          people.getInfo().add(p);
     3.7 +        assertEquals(people.getInfo().toString(), "[{\"firstName\":\"1\",\"lastName\":\"2\",\"sex\":\"MALE\"}]", "Converted to real JSON");
     3.8          
     3.9          PropertyBinding pb = bindings.get("info");
    3.10          assertNotNull(pb, "Binding for info found");