J'ai été en mesure de trouver une bibliothèque zillion pour génération JSON dans Classic ASP (VBScript) mais je n'ai pas été trouvé de TOUT pour analyse.
Je veux quelque chose que je puisse passer une chaîne JSON et récupérer un objet VBScript quelconque (Array, Scripting.Dictionary, etc.)
Gardez à l'esprit que Classic ASP inclut JScript ainsi que VBScript. Fait intéressant, vous pouvez analyser JSON en utilisant JScript et utiliser les objets résultants directement dans VBScript.
Par conséquent, il est possible d'utiliser le canonique https://github.com/douglascrockford/JSON-js/blob/master/json2.js dans le code côté serveur sans aucune modification.
Bien sûr, si votre JSON comprend des tableaux, ceux-ci resteront des tableaux JScript une fois l'analyse terminée. Vous pouvez accéder au contenu du tableau JScript à partir de VBScript à l'aide de la notation par points.
<%@Language="VBScript" %>
<%
Option Explicit
%>
<script language="JScript" runat="server" src='path/to/json2.js'></script>
<%
Dim myJSON
myJSON = Request.Form("myJSON") // "[ 1, 2, 3 ]"
Set myJSON = JSON.parse(myJSON) // [1,2,3]
Response.Write(myJSON) // 1,2,3
Response.Write(myJSON.[0]) // 1
Response.Write(myJSON.[1]) // 2
Response.Write(myJSON.[2]) // 3
%>
Je n'en suis pas sûr. Avez-vous vérifié ASP extreme framework qui prend en charge JSON?
Je n'ai pas réussi à faire fonctionner l'évolution extrême ou la suggestion de Chris Nielson. Mais, ce qui suit a fonctionné pour moi:
http://tforster.wik.is/ASP_Classic_Practices_For_The_21st_Century/JSON4ASP
Téléchargez ce qui suit en tant que "json2.min.asp"
http://tforster.wik.is/@api/deki/files/2/=json2.min.asp
Ajoutez la ligne suivante en haut de votre fichier ASP:
<script language="javascript" runat="server" src="json2.min.asp"></script>
Vous pouvez ensuite utiliser JSON dans ASP.
Dim car: Set car = JSON.parse("{""brand"":""subaru"",""model"":""outback sport"",""year"":2003," & _
"""colour"":""green"",""accessories"":[" & _
"{""foglamps"":true},{""abs"":true},{""heatedSeats"":true}]}")
Response.Write("brand: " & car.brand & "<br/>")
Response.Write("model: " & car.model & "<br/>")
Response.Write("colour: " & car.colour & "<br/>")
Response.Write("has foglamps: " & CStr(car.accessories.get(0).foglamps) & "<br/>")
car.accessories.get(0).foglamps = false
Response.Write("has foglamps: " & CStr(car.accessories.get(0).foglamps) & "<br/>")
Response.Write("new Json: " & JSON.stringify(car) & "<br/>")
Set car = Nothing
Remarque: pour analyser un tableau d'éléments, vous devez procéder comme suit:
for each iTmp in testing
if (TypeName(iTmp))<>"JScriptTypeInfo" then
Response.Write("Item: " & iTmp & "<br/>")
end if
next
J'ai récemment implémenté une classe VbsJson , qui a une décodage " "méthode pour analyser JSON en VBScript et une méthode" Encode "pour générer JSON à partir de VBScript. Le code est un peu long, donc je ne le colle pas ici.
J'ai écrit cette réponse lorsque je cherchais une solution pure VBScript pure et légère.
En assemblant un convertisseur JSON à XML rudimentaire, nous pouvons parcourir la chaîne JSON et la transformer en document Microsoft.XMLDOM.
À partir de là, nous utilisons l'API XML de Microsoft, y compris les requêtes XPath, pour extraire toutes les valeurs souhaitées.
Cela gère le JSON simple, mais je n'ai jamais voulu que cette réponse soit plus sophistiquée.
Pour une solution plus robuste, le meilleur interpréteur JSON est un moteur Javascript approprié. Par conséquent, je recommande fortement la réponse acceptée à cette question, c'est-à-dire Toutes les bonnes bibliothèques pour analyser JSON dans Classic ASP?
Function JSONtoXML(jsonText)
Dim idx, max, ch, mode, xmldom, xmlelem, xmlchild, name, value
Set xmldom = CreateObject("Microsoft.XMLDOM")
xmldom.loadXML "<xml/>"
Set xmlelem = xmldom.documentElement
max = Len(jsonText)
mode = 0
name = ""
value = ""
While idx < max
idx = idx + 1
ch = Mid(jsonText, idx, 1)
Select Case mode
Case 0 ' Wait for Tag Root
Select Case ch
Case "{"
mode = 1
End Select
Case 1 ' Wait for Attribute/Tag Name
Select Case ch
Case """"
name = ""
mode = 2
Case "{"
Set xmlchild = xmldom.createElement("tag")
xmlelem.appendChild xmlchild
xmlelem.appendchild xmldom.createTextNode(vbCrLf)
xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild
Set xmlelem = xmlchild
Case "["
Set xmlchild = xmldom.createElement("tag")
xmlelem.appendChild xmlchild
xmlelem.appendchild xmldom.createTextNode(vbCrLf)
xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild
Set xmlelem = xmlchild
Case "}"
Set xmlelem = xmlelem.parentNode
Case "]"
Set xmlelem = xmlelem.parentNode
End Select
Case 2 ' Get Attribute/Tag Name
Select Case ch
Case """"
mode = 3
Case Else
name = name + ch
End Select
Case 3 ' Wait for colon
Select Case ch
Case ":"
mode = 4
End Select
Case 4 ' Wait for Attribute value or Tag contents
Select Case ch
Case "["
Set xmlchild = xmldom.createElement(name)
xmlelem.appendChild xmlchild
xmlelem.appendchild xmldom.createTextNode(vbCrLf)
xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild
Set xmlelem = xmlchild
name = ""
mode = 1
Case "{"
Set xmlchild = xmldom.createElement(name)
xmlelem.appendChild xmlchild
xmlelem.appendchild xmldom.createTextNode(vbCrLf)
xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild
Set xmlelem = xmlchild
name = ""
mode = 1
Case """"
value = ""
mode = 5
Case " "
Case Chr(9)
Case Chr(10)
Case Chr(13)
Case Else
value = ch
mode = 7
End Select
Case 5
Select Case ch
Case """"
xmlelem.setAttribute name, value
mode = 1
Case "\"
mode = 6
Case Else
value = value + ch
End Select
Case 6
value = value + ch
mode = 5
Case 7
If Instr("}], " & Chr(9) & vbCr & vbLf, ch) = 0 Then
value = value + ch
Else
xmlelem.setAttribute name, value
mode = 1
Select Case ch
Case "}"
Set xmlelem = xmlelem.parentNode
Case "]"
Set xmlelem = xmlelem.parentNode
End Select
End If
End Select
Wend
Set JSONtoXML = xmlDom
End Function
Le script ci-dessus transforme le JSON suivant:
{
"owningSystemUrl": "http://www.arcgis.com",
"authInfo": {
"tokenServicesUrl": "https://www.arcgis.com/sharing/rest/generateToken",
"isTokenBasedSecurity": true
}
}
dans:
<xml owningSystemUrl="http://www.arcgis.com">
<authInfo
tokenServicesUrl="https://www.arcgis.com/sharing/rest/generateToken"
isTokenBasedSecurity="true" >
</authInfo>
</xml>
Nous pouvons maintenant utiliser XPath pour extraire le tokenServicesUrl
, par exemple:
dom.SelectSingleNode("xml/authInfo").getAttribute("tokenServicesUrl")
' Returns: "https://www.arcgis.com/sharing/rest/generateToken"
les solutions ici sont très bonnes mais parfois excessives. Si le JSON est simple et toujours la même structure que vous pouvez l'analyser vous-même, c'est rapide et simple.
'read data from client
records = Request.Form("records")
'convert the JSON string to an array
Set oRegExpre = new RegExp
oRegExpre.Global = true
oRegExpre.Pattern = "[\[\]\{\}""]+"
records = replace(records, "},{","||")
records = oRegExpre.Replace(records, "" )
aRecords = split(records,"||")
'iterate the array and do some cleanup
for each rec in aRecords
aRecord = split(rec,",")
id = split(aRecord(1),":")(1)
field = split(aRecord(0),":")(0)
updateValue = split(aRecord(0),":")(1)
updateValue = replace(updateValue,chr(10),"\n")
updateValue = replace(updateValue,chr(13),"\r")
updateValue = replace(updateValue,"'","''")
'etc
next
AX est une excellente bibliothèque mais est plutôt lourde si vous avez juste besoin d'une fonctionnalité de traitement JSON.
J'ai cependant récupéré le fichier base.asp et le fichier de classe json.asp du projet AX et les ai utilisés avec succès pour implémenter l'analyse JSON dans mon projet.
Pour la génération JSON, j'ai trouvé aspjson était plus simple à intégrer. Il possède également des fonctionnalités liées à json plus puissantes. La documentation hache manquait un peu et était plus de travail à intégrer dans le projet, mais elle fait un bon travail de sérialisation de son objet JSON VB en une chaîne).