You're not JSON escaping keys.
Code: Select all
--- a/Json2.pbi 2013-02-19 17:08:17.716628088 +0100
+++ b/Json2.pbi 2013-03-28 16:32:33.984799955 +0100
@@ -253,11 +253,12 @@
Case 't' ; tabulator
string + Chr(9)
Case 'u' ; 4 hex digits
+ *c + SizeOf(CHARACTER) ; eat the 'u'
If nullByte - *c > 4 * SizeOf(CHARACTER)
hexDigit = "$"
;For i = 1 To 4
hexDigit + PeekS(*c, 4)
- *c + SizeOf(CHARACTER) * 4
+ *c + SizeOf(CHARACTER) * 3 ; only 3 the 4th eaten below
;Next
string + Chr(Val(hexDigit))
Else
@@ -522,6 +523,18 @@
EndIf
EndProcedure
+Procedure.s JSON_encodeString(str.s)
+ Protected tmpString.s = ReplaceString(str, "\", "\\") ; \
+ tmpString = ReplaceString(tmpString, Chr(8), "\b") ; backspace
+ tmpString = ReplaceString(tmpString, Chr(14), "\f") ; formfeed
+ tmpString = ReplaceString(tmpString, Chr(10), "\n") ; new line
+ tmpString = ReplaceString(tmpString, Chr(13), "\r") ; carriage return
+ tmpString = ReplaceString(tmpString, Chr(9), "\t") ; tabulator
+ tmpString = ReplaceString(tmpString, Chr(34), "\" + Chr(34)) ; "
+ tmpString = ReplaceString(tmpString, "/", "\/") ; /
+ ProcedureReturn tmpString
+EndProcedure
+
Procedure.s JSON_encode(*obj.jsonObj, spaces.i = 0, type.i = #JSON_Type_Undefined)
Protected tmpString.s
Protected i.i
@@ -557,17 +570,8 @@
Case #JSON_Type_Integer
JSON_addString(Str(*obj\i))
Case #JSON_Type_String
- tmpString = ReplaceString(*obj\s, "\", "\\") ; \
- tmpString = ReplaceString(tmpString, Chr(8), "\b") ; backspace
- tmpString = ReplaceString(tmpString, Chr(14), "\f") ; formfeed
- tmpString = ReplaceString(tmpString, Chr(10), "\n") ; new line
- tmpString = ReplaceString(tmpString, Chr(13), "\r") ; carriage return
- tmpString = ReplaceString(tmpString, Chr(9), "\t") ; tabulator
- tmpString = ReplaceString(tmpString, Chr(34), "\" + Chr(34)) ; "
- tmpString = ReplaceString(tmpString, "/", "\/") ; /
-
JSON_addString(Chr(34))
- JSON_addString(tmpString)
+ JSON_addString(JSON_encodeString(*obj\s))
JSON_addString(Chr(34))
Case #JSON_Type_Array
JSON_addString("[")
@@ -595,7 +599,7 @@
NextMapElement(*obj\o())
JSON_addString(Space(spaces + 2))
JSON_addString(Chr(34))
- JSON_addString(MapKey(*obj\o()))
+ JSON_addString(JSON_encodeString(MapKey(*obj\o())))
JSON_addString(Chr(34))
JSON_addString(" : ")
CompilerIf Defined(JSON_UseObjectPointer, #PB_Constant)