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