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