On Thu, 26 Apr 2007 11:30:49 -0500, michal <> wrote:
> hi guys,
> i thought you might be interested in a nice JSON class which converts
> ASP datatypes (basic datatypes, dictionaries, recordsets, ...) into
> JSON so that javascript can easily understand it ...
> you'll find the demonstration and the download here
> http://fabiankoehler.de/wdb/2007/04/...asp-datatypes/
You might find refactoring that generateValue function into several
smaller functions worthwhile. I have a function I use for debugging
which looks like this:
Function Repr(val)
Dim r
Select Case False
' For Scalars and objects other than Err, the name of the Repr
' function can be derived directly from the value's type
Case IsObject(val), val Is Err
On Error Resume Next
Set r = GetRef("Repr::" & TypeName(val))
On Error Goto 0
' The type of the Err object is "Object", so its Repr function
' must be manually chosen
Case Else
Set r = GetRef("Repr::Err")
End Select
If IsEmpty(r) Then Repr = TypeName(val) Else Repr = r(val)
End Function
Then simple specialized functions for each data type can be defined:
Function [Repr::Integer] (val)
[Repr::Integer] = "CInt(" & val & ")"
End Function
Function [Repr:

ate] (val)
[Repr:

ate] = "#" & val & "#"
End Function
Function [Repr::String] (val)
[Repr::String] = """" _
& Replace(val, """", """""") _
& """"
End Function
Function [Repr::Boolean] (val)
[Repr::Boolean] = CStr(val)
End Function
Function [Repr::Variant()] (val)
With CreateObject("Scripting.Dictionary")
Dim elm: For Each elm In val : .Add .Count, Repr(elm) : Next
[Repr::Variant()] = "Array(" & Join(.Items, ", ") & ")"
End With
End Function
This allows you to easily define Repr functions for user-defined types:
Class Foo : End Class
Function [Repr::Foo] (val)
[Repr::Foo] = "New Foo"
End Function
You should be able to use a similar strategy to emit JSON-encoded data.
--
Justin Piper
Bizco Technologies
http://www.bizco.com/