Decode/Encode JSON with VBScript Decode/Encode JSON with VBScript json json

Decode/Encode JSON with VBScript


As JSON is a hierarchical data format, using Regular expressions and Split(), as Peter proposed, won't get you far.

If your environment allows CreateObject() you may be able to use a ready made COMponent written in another language (e.g. wrap the standard json2.js in a .WSC or COM enable a .NET DLL). Another option would be to harness another language via the Microsoft Script Control. The con of this approach is that you'll have to deal with the objects/arrays delivered by the other language (some hints are to be found in the topic Peter refered to).

A pure VBScript solution can be found here. I can't read the documentation, but the code compiles and 'works' for simple test cases - YMMV.


How about doing this with ASPJSON?
Available from http://www.aspjson.com/

I'm about to use this as a solution for a very old site to send an ajax call (using Jquery) with the encoded data to a MongoDB, for testing.


I had a similar problem so I wrote a JSONtoXML function in VBScript for one of my projects. No warranties on this script (it's provided as-is and has known limitations such as not handling all types of escape sequences):

Const stateRoot = 0Const stateNameQuoted = 1Const stateNameFinished = 2Const stateValue = 3Const stateValueQuoted = 4Const stateValueQuotedEscaped = 5Const stateValueUnquoted = 6Const stateValueUnquotedEscaped = 7Function JSONToXML(json)  Dim dom, xmlElem, i, ch, state, name, value  Set dom = CreateObject("Microsoft.XMLDOM")  state = stateRoot  For i = 1 to Len(json)    ch = Mid(json, i, 1)    Select Case state    Case stateRoot      Select Case ch      Case "["        If dom.documentElement is Nothing Then          Set xmlElem = dom.CreateElement("ARRAY")          Set dom.documentElement = xmlElem        Else          Set xmlElem = XMLCreateChild(xmlElem, "ARRAY")        End If      Case "{"        If dom.documentElement is Nothing Then          Set xmlElem = dom.CreateElement("OBJECT")          Set dom.documentElement = xmlElem        Else          Set xmlElem = XMLCreateChild(xmlElem, "OBJECT")        End If      Case """"        state = stateNameQuoted         name = ""      Case "}"        Set xmlElem = xmlElem.parentNode      Case "]"        Set xmlElem = xmlElem.parentNode      End Select    Case stateNameQuoted       Select Case ch      Case """"        state = stateNameFinished      Case Else        name = name + ch      End Select    Case stateNameFinished      Select Case ch      Case ":"        value = ""        State = stateValue      End Select    Case stateValue      Select Case ch      Case """"        State = stateValueQuoted      Case "{"        Set xmlElem = XMLCreateChild(xmlElem, "OBJECT")        State = stateRoot      Case "["        Set xmlElem = XMLCreateChild(xmlElem, "ARRAY")        State = stateRoot      Case " "      Case Chr(9)      Case vbCr      Case vbLF      Case Else        value = ch        State = stateValueUnquoted      End Select    Case stateValueQuoted      Select Case ch      Case """"        xmlElem.setAttribute name, value        state = stateRoot      Case "\"        state = stateValueQuotedEscaped      Case Else        value = value + ch      End Select    Case stateValueQuotedEscaped ' @@TODO: Handle escape sequences      value = value + ch      state = stateValueQuoted    Case stateValueUnquoted      Select Case ch      Case "}"        xmlElem.setAttribute name, value        Set xmlElem = xmlElem.parentNode        state = stateRoot      Case "]"        xmlElem.setAttribute name, value        Set xmlElem = xmlElem.parentNode        state = stateRoot      Case ","        xmlElem.setAttribute name, value        state = stateRoot      Case "\"         state = stateValueUnquotedEscaped      Case Else        value = value + ch      End Select    Case stateValueUnquotedEscaped ' @@TODO: Handle escape sequences      value = value + ch      state = stateValueUnquoted    End Select  Next  Set JSONToXML = domEnd FunctionFunction XMLCreateChild(xmlParent, tagName)  Dim xmlChild  If xmlParent is Nothing Then    Set XMLCreateChild = Nothing    Exit Function  End If  If xmlParent.ownerDocument is Nothing Then    Set XMLCreateChild = Nothing    Exit Function  End If  Set xmlChild = xmlParent.ownerDocument.createElement(tagName)  xmlParent.appendChild xmlChild  Set XMLCreateChild = xmlChildEnd Function