J'ai un outil de développement rapide pour un système ERP, qui ne permet que vbscript. J'essaie de créer une simple demande AJAX avec VBS. Cela fonctionnait avec l'objet "Microsoft.XMLHTTP".
L'étape suivante consiste à recevoir des données d'un serveur Web à l'aide de json. Mais dans VBS, il ne semble pas y avoir de fonction comme "json_decode" ou autre.
Quelqu'un connaît-il une solution? Ou est-ce la seule option pour développer ma propre fonction json?
Comme JSON est un format de données hiérarchique, l'utilisation d'expressions régulières et de Split (), comme Peter l'a proposé, ne vous mènera pas loin.
Si votre environnement autorise CreateObject()
, vous pourrez peut-être utiliser un composant COM prêt à l'emploi écrit dans une autre langue (par exemple, envelopper le json2.js standard dans un .WSC ou COM activer une DLL .NET). Une autre option serait d'exploiter une autre langue via le Microsoft Script Control. L'inconvénient de cette approche est que vous devrez traiter avec les objets/tableaux fournis par l'autre langue (certaines astuces se trouvent dans le sujet auquel Peter a fait référence).
Une solution VBScript pure peut être trouvée ici . Je ne peux pas lire la documentation, mais le code compile et "fonctionne" pour les cas de test simples - YMMV.
Que diriez-vous de faire cela avec ASPJSON?
Disponible sur http://www.aspjson.com/
Je suis sur le point de l'utiliser comme solution pour un très ancien site pour envoyer un appel ajax (en utilisant Jquery) avec les données encodées à un MongoDB, pour le test.
J'ai eu un problème similaire, j'ai donc écrit une fonction JSONtoXML dans VBScript pour l'un de mes projets. Aucune garantie sur ce script (il est fourni en l'état et comporte des limitations connues telles que la non-gestion de tous les types de séquences d'échappement):
Const stateRoot = 0
Const stateNameQuoted = 1
Const stateNameFinished = 2
Const stateValue = 3
Const stateValueQuoted = 4
Const stateValueQuotedEscaped = 5
Const stateValueUnquoted = 6
Const stateValueUnquotedEscaped = 7
Function 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 = dom
End Function
Function 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 = xmlChild
End Function
Découvrez https://github.com/rcdmk/aspJSON
Je ne sais pas si cela a un lien avec www.ASPJSON.com (maintenant disparu) mentionné dans la réponse de Logan.
Vous devriez mieux déployer le vôtre sur la base d'une requête ici sur json et asp. Comme par exemple celui-ci Toutes les bonnes bibliothèques pour analyser JSON dans Classic ASP? La plupart du temps la bibliothèque json2 est utilisée mais elle est basée sur jscript donc aucune option pour vous. De plus, la plupart du temps, ce type de JSON a une structure fixe, il ne devrait donc pas être si difficile d'analyser une expression régulière comme je l'ai démontré dans quelques réponses comme celle ci-dessus. Vous pouvez publier une partie de votre JSON afin que nous puissions le tester avec certaines routines.