diff -u -r python-cjson-1.0.5/cjson.c python-cjson-1.0.5a/cjson.c
--- python-cjson-1.0.5/cjson.c	2007-08-16 13:48:27.000000000 -0700
+++ python-cjson-1.0.5a/cjson.c	2007-12-18 05:54:21.454490300 -0800
@@ -162,12 +162,42 @@
 
     len = ptr - jsondata->ptr - 1;
 
+    // HACK:  PyUnicode_DecodeUnicodeEscape and PyString_DecodeEscape don't
+    // unescape '/', force the issue by doing an unescape beforehand...
+    char *buf = malloc(len + 1);  // at least len+1 bytes
+    len = 0;
+    ptr = jsondata->ptr + 1;
+    while (True) {
+        c = *ptr;
+        buf[len++] = c;
+        if (!escaping) {
+            if (c == '\\') {
+                escaping = True;
+            } else if (c == '"') {
+                break;
+            }
+        } else {
+            if (c == '/') {
+                len -= 2;         // backup and replace the \ with the /
+                buf[len++] = '/';
+            }
+            escaping = False;
+        }
+        ptr++;
+    }
+
+    // backup to remove the "
+    len--;
+
     if (has_unicode || jsondata->all_unicode)
-        object = PyUnicode_DecodeUnicodeEscape(jsondata->ptr+1, len, NULL);
+        object = PyUnicode_DecodeUnicodeEscape(buf, len, NULL);
     else if (string_escape)
-        object = PyString_DecodeEscape(jsondata->ptr+1, len, NULL, 0, NULL);
+        object = PyString_DecodeEscape(buf, len, NULL, 0, NULL);
     else
-        object = PyString_FromStringAndSize(jsondata->ptr+1, len);
+        object = PyString_FromStringAndSize(buf, len);
+
+    free(buf);
+    // end HACK
 
     if (object == NULL) {
         PyObject *type, *value, *tb, *reason;
@@ -532,7 +562,7 @@
  * Python's stringobject.c with the following differences:
  *
  * - it always quotes the output using double quotes.
- * - it also quotes \b and \f
+ * - it also quotes \b, \f, and \/
  * - it replaces any non ASCII character hh with \u00hh instead of \xhh
  */
 static PyObject*
@@ -578,6 +608,8 @@
                 *p++ = '\\', *p++ = 'f';
             else if (c == '\b')
                 *p++ = '\\', *p++ = 'b';
+            else if (c == '/')
+                *p++ = '\\', *p++ = '/';
             else if (c < ' ' || c >= 0x7f) {
                 /* For performance, we don't want to call
                  * PyOS_snprintf here (extra layers of
@@ -602,7 +634,7 @@
  *
  * - it always quotes the output using double quotes.
  * - it uses \u00hh instead of \xhh in output.
- * - it also quotes \b and \f
+ * - it also quotes \b, \f, and \/
  */
 static PyObject*
 encode_unicode(PyObject *unicode)
@@ -723,6 +755,10 @@
             *p++ = '\\';
             *p++ = 'b';
         }
+        else if (ch == '/') {
+            *p++ = '\\';
+            *p++ = '/';
+        }
 
         /* Map non-printable US ASCII to '\u00hh' */
         else if (ch < ' ' || ch >= 0x7F) {
diff -u -r python-cjson-1.0.5/jsontest.py python-cjson-1.0.5a/jsontest.py
--- python-cjson-1.0.5/jsontest.py	2007-07-25 06:55:08.000000000 -0700
+++ python-cjson-1.0.5a/jsontest.py	2007-12-18 06:18:24.354013500 -0800
@@ -49,9 +49,9 @@
         obj = cjson.decode(r'"\""')
         self.assertEqual(r'"', obj)
 
-#    def testReadEscapedSolidus(self):
-#        obj = cjson.decode(r'"\/"')
-#        self.assertEqual(r'/', obj)
+    def testReadEscapedSolidus(self):
+        obj = cjson.decode(r'"\/"')
+        self.assertEqual(r'/', obj)
 
     def testReadEscapedReverseSolidus(self):
         obj = cjson.decode(r'"\\"')
@@ -88,13 +88,12 @@
         self.assertEqual(r'"\""', _removeWhitespace(s))
 
     def testWriteEscapedSolidus(self):
-        s = cjson.encode(r'/')
-        #self.assertEqual(r'"\/"', _removeWhitespace(s))
-        self.assertEqual('"/"', _removeWhitespace(s))
+        s = cjson.encode(r'/') #, escaped_forward_slash=True)
+        self.assertEqual(r'"\/"', _removeWhitespace(s))
 
     def testWriteNonEscapedSolidus(self):
         s = cjson.encode(r'/')
-        self.assertEqual(r'"/"', _removeWhitespace(s))
+        self.assertEqual(r'"\/"', _removeWhitespace(s))
 
     def testWriteEscapedReverseSolidus(self):
         s = cjson.encode("\\")
@@ -141,6 +140,36 @@
 
     def doReadBadArray(self):
         cjson.decode('[1,2,3,,]')
+
+    def testReadDoubleSolidusComment(self):
+        obj = cjson.decode("[1, 2, // This is a comment.\n 3]")
+        self.assertEqual([1, 2, 3], obj)
+        obj = cjson.decode('[1, 2, // This is a comment.\n{"last":3}]')
+        self.assertEqual([1, 2, {"last":3}], obj)
+
+    def testReadBadDoubleSolidusComment(self):
+        self.assertRaises(_exception, self.doReadBadDoubleSolidusComment)
+
+    def doReadBadDoubleSolidusComment(self):
+        cjson.decode("[1, 2, / This is not a comment.\n 3]")
+        
+    def testReadCStyleComment(self):
+        obj = cjson.decode("[1, 2, /* This is a comment. \n */ 3]")
+        self.assertEqual([1, 2, 3], obj)
+        obj = cjson.decode('[1, 2, /* This is a comment. */{"last":3}]')
+        self.assertEqual([1, 2, {"last":3}], obj)
+
+    def testReadCStyleCommentWithoutEnd(self):
+        self.assertRaises(_exception, self.doReadCStyleCommentWithoutEnd)
+
+    def testReadCStyleCommentWithSlashStar(self):
+        self.assertRaises(_exception, self.doReadCStyleCommentWithSlashStar)
+
+    def doReadCStyleCommentWithoutEnd(self):
+        cjson.decode("[1, 2, /* This is not a comment./ 3]")
+
+    def doReadCStyleCommentWithSlashStar(self):
+        cjson.decode("[1, 2, /* This is not a comment./* */ 3]")
         
     def testReadBadObjectSyntax(self):
         self.assertRaises(_exception, self.doReadBadObjectSyntax)
@@ -302,10 +331,22 @@
     def testReadClosingObjectBracket(self):
         self.assertEqual({"a":[1,2,3]}, cjson.decode('{"a":[1,2,3]}'))
 
+    def testAnotherDoubleSlashComment(self):
+        obj = cjson.decode('[1 , // xzy\n2]')
+        self.assertEqual(obj, [1, 2])
+
+    def testAnotherSlashStarComment(self):
+        obj = cjson.decode('[1,/* xzy */2]')
+        self.assertEqual(obj, [1, 2])
+
     def testEmptyObjectInList(self):
         obj = cjson.decode('[{}]')
         self.assertEqual([{}], obj)
 
+    def testObjectInListWithSlashStarComment(self):
+        obj1 = cjson.decode('[{} /*Comment*/]')
+        self.assertEqual([{}], obj1)
+
     def testObjectWithEmptyList(self):
         obj = cjson.decode('{"test": [] }')
         self.assertEqual({"test":[]}, obj)
@@ -314,6 +355,10 @@
         obj = cjson.decode('{"test": [3, 4, 5] }')
         self.assertEqual({"test":[3, 4, 5]}, obj)
 
+    def testCommentInObjectWithListValue(self):
+        obj2 = cjson.decode('{"test": [] /*Comment*/}')
+        self.assertEqual({"test":[]}, obj2)
+
     def testWriteLong(self):
         self.assertEqual("12345678901234567890", cjson.encode(12345678901234567890))
         
