From a1fcffecb27c5c437f0f1d58cdbd6ed9ed266942 Mon Sep 17 00:00:00 2001 From: Douglas Crockford Date: Thu, 13 Jan 2011 16:45:01 -0800 Subject: [PATCH] ' --- Test.java | 18 +++++++++--------- XML.java | 29 ++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Test.java b/Test.java index f2a7fb4..b4a46ab 100755 --- a/Test.java +++ b/Test.java @@ -41,7 +41,7 @@ SOFTWARE. * * @author JSON.org * @author yusuke at mac.com - * @version 2010-12-29 + * @version 2011-01-13 */ public class Test extends TestCase { public Test(String name) { @@ -350,8 +350,8 @@ public class Test extends TestCase { "}}", jsonobject.toString(4)); jsonobject = new JSONObject(beanie); - //assertEquals("{\"string\":\"A beany object\",\"BENT\":\"All uppercase key\",\"boolean\":true,\"number\":42,\"x\":\"x\"}" - // , jsonobject.toString()); + assertEquals("{\"string\":\"A beany object\",\"BENT\":\"All uppercase key\",\"boolean\":true,\"number\":42,\"x\":\"x\"}" + , jsonobject.toString()); string = "{ \"entity\": { \"imageURL\": \"\", \"name\": \"IXXXXXXXXXXXXX\", \"id\": 12336, \"ratingCount\": null, \"averageRating\": null } }"; jsonobject = new JSONObject(string); @@ -491,7 +491,7 @@ public class Test extends TestCase { " ],\n" + " \"slashes\": \"///\"\n" + "}", jsonobject.toString(2)); - assertEquals("'"///"'don't"quoted"</script>\\", + assertEquals("'"///"'don't"quoted"</script>\\", XML.toString(jsonobject)); jsonobject = new JSONObject( @@ -520,7 +520,7 @@ public class Test extends TestCase { jsonarray.put(false); jsonarray.put(new JSONArray()); jsonarray.put(new JSONObject()); - jsonobject.put("keys", JSONObject.getNames(jsonobject)); + jsonobject.put("keys", JSONObject.getNames(jsonobject)); assertEquals("{\n" + " \"JSONArray\": [],\n" + " \"JSONObject\": {},\n" + @@ -581,8 +581,8 @@ public class Test extends TestCase { " \"true\": true,\n" + " \"zero\": -0\n" + "}", jsonobject.toString(4)); -// assertEquals("null10Good[Ljava.lang.String;@4d12512757truetruefalse98765432100.01.000000011.0000000000011.01.0E-172.00.12.0E100-32string6662001.99so "fine".so <fine>.truefalse-0.01.2345678901234568E2998.6falsetrue<\\u2028>?<\\u2029>?null", -// XML.toString(j)); + assertEquals("null10GoodtotenJSONObjectJSONArrayopinttruefoozerodoubleStringfalsebool\\u2028\\u2029null57truetruefalse98765432100.01.000000011.0000000000011.01.0E-172.00.12.0E100-32string6662001.99so "fine".so <fine>.truefalse-0.01.2345678901234568E2998.6falsetrue<\\u2028>\u2028<\\u2029>\u2029null", + XML.toString(jsonobject)); assertEquals(98.6d, jsonobject.getDouble("String"), eps); assertTrue(jsonobject.getBoolean("bool")); assertEquals(null, jsonobject.getString("to")); @@ -1057,7 +1057,7 @@ public class Test extends TestCase { " \"xmlns:xsi\": \"http://www.w3.org/1999/XMLSchema-instance\"\n" + "}}", jsonobject.toString(2)); - assertEquals("latin1xsd:stringhttp://schemas.xmlsoap.org/soap/encoding/xsd:string0xsd:int'+search+'xsd:stringlatin1xsd:stringfalsexsd:booleanurn:GoogleSearchxsd:stringtruexsd:boolean10xsd:intGOOGLEKEYxsd:stringhttp://www.w3.org/1999/XMLSchemahttp://www.w3.org/1999/XMLSchema-instancehttp://schemas.xmlsoap.org/soap/envelope/", + assertEquals("latin1xsd:stringhttp://schemas.xmlsoap.org/soap/encoding/xsd:string0xsd:int'+search+'xsd:stringlatin1xsd:stringfalsexsd:booleanurn:GoogleSearchxsd:stringtruexsd:boolean10xsd:intGOOGLEKEYxsd:stringhttp://www.w3.org/1999/XMLSchemahttp://www.w3.org/1999/XMLSchema-instancehttp://schemas.xmlsoap.org/soap/envelope/", XML.toString(jsonobject)); jsonobject = new JSONObject("{Envelope: {Body: {\"ns1:doGoogleSearch\": {oe: \"latin1\", filter: true, q: \"'+search+'\", key: \"GOOGLEKEY\", maxResults: 10, \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\", start: 0, ie: \"latin1\", safeSearch:false, \"xmlns:ns1\": \"urn:GoogleSearch\"}}}}"); @@ -1073,7 +1073,7 @@ public class Test extends TestCase { " \"start\": 0,\n" + " \"xmlns:ns1\": \"urn:GoogleSearch\"\n" + "}}}}", jsonobject.toString(2)); - assertEquals("latin1http://schemas.xmlsoap.org/soap/encoding/0'+search+'latin1falseurn:GoogleSearch10GOOGLEKEYtrue", + assertEquals("latin1http://schemas.xmlsoap.org/soap/encoding/0'+search+'latin1falseurn:GoogleSearch10GOOGLEKEYtrue", XML.toString(jsonobject)); jsonobject = CookieList.toJSONObject(" f%oo = b+l=ah ; o;n%40e = t.wo "); diff --git a/XML.java b/XML.java index 59d20d0..22acfb2 100755 --- a/XML.java +++ b/XML.java @@ -24,6 +24,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +import java.lang.reflect.Array; import java.util.Iterator; @@ -31,7 +32,7 @@ import java.util.Iterator; * This provides static methods to convert an XML text into a JSONObject, * and to covert a JSONObject into an XML text. * @author JSON.org - * @version 2010-12-24 + * @version 2011-01-13 */ public class XML { @@ -90,6 +91,9 @@ public class XML { case '"': sb.append("""); break; + case '\'': + sb.append("'"); + break; default: sb.append(c); } @@ -443,18 +447,29 @@ public class XML { ja = (JSONArray)value; length = ja.length(); for (i = 0; i < length; i += 1) { - value = ja.get(i); - if (value instanceof JSONArray) { + value = ja.get(i); + if (value instanceof JSONArray) { sb.append('<'); sb.append(key); sb.append('>'); - sb.append(toString(value)); + sb.append(toString(value)); sb.append("'); - } else { - sb.append(toString(value, key)); - } + } else { + sb.append(toString(value, key)); + } + } + } else if (value.getClass().isArray()) { + length = Array.getLength(value); + for (i = 0; i < length; i += 1) { + sb.append('<'); + sb.append(key); + sb.append('>'); + sb.append(Array.get(value, i).toString()); + sb.append("'); } } else if (value.equals("")) { sb.append('<');