You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by yo...@apache.org on 2008/06/10 20:00:39 UTC

svn commit: r666240 - in /labs/noggit/src: main/java/org/apache/noggit/ test/java/org/apache/noggit/

Author: yonik
Date: Tue Jun 10 11:00:38 2008
New Revision: 666240

URL: http://svn.apache.org/viewvc?rev=666240&view=rev
Log:
first cut at basic JSON serialization

Modified:
    labs/noggit/src/main/java/org/apache/noggit/JSONUtil.java
    labs/noggit/src/main/java/org/apache/noggit/JSONWriter.java
    labs/noggit/src/main/java/org/apache/noggit/ObjectBuilder.java
    labs/noggit/src/main/java/org/apache/noggit/TextWriter.java
    labs/noggit/src/test/java/org/apache/noggit/TestObjectBuilder.java

Modified: labs/noggit/src/main/java/org/apache/noggit/JSONUtil.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/main/java/org/apache/noggit/JSONUtil.java?rev=666240&r1=666239&r2=666240&view=diff
==============================================================================
--- labs/noggit/src/main/java/org/apache/noggit/JSONUtil.java (original)
+++ labs/noggit/src/main/java/org/apache/noggit/JSONUtil.java Tue Jun 10 11:00:38 2008
@@ -34,6 +34,15 @@
   public static final char ARRAY_START = '[';
   public static final char ARRAY_END = ']';
 
+  public static String toJSON(Object o) {
+       CharArr out = new CharArr();
+    new TextSerializer().serialize(new JSONWriter(out), o);
+    return out.toString();
+
+  }
+
+
+
   public static void writeNumber(long number, CharArr out) {
     out.write(Long.toString(number));
   }
@@ -42,10 +51,6 @@
     out.write(Double.toString(number));
   }
 
-  public static void writeString(String val, CharArr out) {
-
-  }
-
   public static void writeString(CharArr val, CharArr out) {
     writeString(val.getArray(), val.getStart(), val.getEnd(), out);
   }
@@ -56,6 +61,12 @@
     out.write('"');
   }
 
+  public static void writeString(CharSequence val, int start, int end, CharArr out) {
+    out.write('"');
+    writeStringPart(val,start,end,out);
+    out.write('"');
+  }
+
   public static void writeStringPart(char[] val, int start, int end, CharArr out) {
     for (int i=start; i<end; i++) {
       char ch = val[i];
@@ -81,6 +92,32 @@
     }
   }
 
+  public static void writeStringPart(CharSequence chars, int start, int end, CharArr out) {
+    for (int i=start; i<end; i++) {
+      char ch = chars.charAt(i);
+      switch(ch) {
+        case '"':
+        case '\\':
+          out.write('\\');
+          out.write(ch);
+          break;
+        case '\r': out.write('\\'); out.write('r'); break;
+        case '\n': out.write('\\'); out.write('n'); break;
+        case '\t': out.write('\\'); out.write('t'); break;
+        case '\b': out.write('\\'); out.write('b'); break;
+        case '\f': out.write('\\'); out.write('f'); break;
+        // case '/':
+        default:
+          if (ch <= 0x1F) {
+            unicodeEscape(ch,out);
+          } else {
+            out.write(ch);
+          }
+      }
+    }
+  }
+
+
   public static void unicodeEscape(int ch, CharArr out) {
     out.write('\\');
     out.write('u');
@@ -97,4 +134,5 @@
   public static void writeBoolean(boolean val, CharArr out) {
     out.write(val ? TRUE_CHARS : FALSE_CHARS);
   }
+
 }

Modified: labs/noggit/src/main/java/org/apache/noggit/JSONWriter.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/main/java/org/apache/noggit/JSONWriter.java?rev=666240&r1=666239&r2=666240&view=diff
==============================================================================
--- labs/noggit/src/main/java/org/apache/noggit/JSONWriter.java (original)
+++ labs/noggit/src/main/java/org/apache/noggit/JSONWriter.java Tue Jun 10 11:00:38 2008
@@ -46,8 +46,8 @@
     JSONUtil.writeNull(out);
   }
 
-  public void writeString(String str) {
-    JSONUtil.writeString(str,out);
+  public void writeString(CharSequence str) {
+    JSONUtil.writeString(str,0,str.length(),out);
   }
 
   public void writeString(CharArr str) {
@@ -55,12 +55,15 @@
   }
 
   public void writeStringStart() {
+    out.write('"');
   }
 
   public void writeStringChars(CharArr partialStr) {
+    JSONUtil.writeStringPart(partialStr.getArray(), partialStr.getStart(), partialStr.getEnd(), out);
   }
 
   public void writeStringEnd() {
+    out.write('"');
   }
 
   public void write(long number) {
@@ -80,22 +83,27 @@
   }
 
   public void writePartialNumber(CharArr digits) {
+    out.write(digits);
   }
 
   public void startObject() {
     out.write('{');
+    level++;
   }
 
   public void endObject() {
     out.write('}');
+    level--;    
   }
 
   public void startArray() {
     out.write('[');
+    level++;
   }
 
   public void endArray() {
     out.write(']');
+    level--;
   }
 
   public void writeValueSeparator() {
@@ -108,61 +116,3 @@
 
 }
 
-/***
-class JSONSerializer {
-  private static final HashMap map = new HashMap();
-
-  public abstract static class Handler {
-    public abstract void handle(JSONSerializer serializer, Object val);
-  }
-
-  static {
-    map.put(String.class, new Handler() {
-      public void handle(JSONSerializer serializer, Object val) {
-        serializer.writeString((String)val);
-      }
-    } );
-
-
-  }
-
-
-  public static void toJSON(Object o) {
-  }
-
-  public void write(Object o) {
-
-
-  }
-
-
-}
-***/
-
-class JSONSerializer2 {
-  // need any interaction with parser??
-  // does this need to be a class, or is a static method fine?
-
-  // JS.toJSON(myObj)
-  //
-  // Simple methods...
-  // JSON.toJSON(myObj)
-  // JSON.toObj(String json)
-  //
-
-
-  protected final TextWriter writer;
-  public JSONSerializer2(TextWriter writer) {
-    this.writer = writer;
-  }
-
-  public static void toJSON(Object o) {
-  }
-
-  public void write(Object o) {
-
-
-  }
-
-
-}

Modified: labs/noggit/src/main/java/org/apache/noggit/ObjectBuilder.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/main/java/org/apache/noggit/ObjectBuilder.java?rev=666240&r1=666239&r2=666240&view=diff
==============================================================================
--- labs/noggit/src/main/java/org/apache/noggit/ObjectBuilder.java (original)
+++ labs/noggit/src/main/java/org/apache/noggit/ObjectBuilder.java Tue Jun 10 11:00:38 2008
@@ -91,8 +91,7 @@
   }
 
   public Object getBoolean() throws IOException {
-    parser.getNull();
-    return null;
+    return parser.getBoolean();
   }
 
   public Object getNull() throws IOException {

Modified: labs/noggit/src/main/java/org/apache/noggit/TextWriter.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/main/java/org/apache/noggit/TextWriter.java?rev=666240&r1=666239&r2=666240&view=diff
==============================================================================
--- labs/noggit/src/main/java/org/apache/noggit/TextWriter.java (original)
+++ labs/noggit/src/main/java/org/apache/noggit/TextWriter.java Tue Jun 10 11:00:38 2008
@@ -17,9 +17,7 @@
 
 package org.apache.noggit;
 
-import java.util.Map;
-import java.util.List;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * @author yonik
@@ -28,7 +26,7 @@
 public abstract class TextWriter {
   public abstract void writeNull();
 
-  public abstract void writeString(String str);
+  public abstract void writeString(CharSequence str);
 
   public abstract void writeString(CharArr str);
 
@@ -43,7 +41,7 @@
   public abstract void write(boolean bool);
 
   public abstract void writeNumber(CharArr digits);
-
+  
   public abstract void writePartialNumber(CharArr digits);
 
   public abstract void startObject();
@@ -58,29 +56,6 @@
 
   public abstract void writeNameSeparator();
 
-  /*** Should object serialization be in this class, or another class?
-
-  void write(Map map);
-
-  void write(Collection collection);
-
-  void write(Object[] arr);
-  void write(byte[] arr);
-  void write(char[] arr);
-  void write(short[] arr);
-  void write(int[] arr);
-  void write(long[] arr);
-  void write(double[] arr);
-
-  void writeNameValue(String name, Object val)?
-  ***/
+  // void writeNameValue(String name, Object val)?
 }
 
-class TextSerialzer {
-  public void serialize(TextWriter writer, Map map) {
-    writer.startObject();
-
-    writer.endObject();
-  }
-
-}

Modified: labs/noggit/src/test/java/org/apache/noggit/TestObjectBuilder.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/test/java/org/apache/noggit/TestObjectBuilder.java?rev=666240&r1=666239&r2=666240&view=diff
==============================================================================
--- labs/noggit/src/test/java/org/apache/noggit/TestObjectBuilder.java (original)
+++ labs/noggit/src/test/java/org/apache/noggit/TestObjectBuilder.java Tue Jun 10 11:00:38 2008
@@ -32,7 +32,16 @@
     val = val.replace('\'','"');
     JSONParser p = TestJSONParser.getParser(val);
     Object v = ObjectBuilder.getVal(p);
-    assertEquals(expected,v);
+
+    String s1 = JSONUtil.toJSON(v);
+    String s2 = JSONUtil.toJSON(expected);
+    assertEquals(s1, s2);
+
+    // not make sure that it round-trips correctly
+    JSONParser p2 = TestJSONParser.getParser(s1);
+    Object v2 = ObjectBuilder.getVal(p2);
+    String s3 = JSONUtil.toJSON(v2);
+    assertEquals(s1, s3);
   }
 
   public static List A(Object... lst) {
@@ -61,8 +70,7 @@
     testVariations("{}", O());
     testVariations("[[]]", A(A()));
     testVariations("{'foo':{}}", O("foo",O()));
-
-
+    testVariations("[false,true,1,1.4,null,'hi']", A(false,true,1,1.4,null,"hi"));
   }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org