77 votes

Toutes les bonnes bibliothèques pour l'analyse JSON en ASP Classique?

J'ai été en mesure de trouver un tas de bibliothèques pour générer du JSON dans le Classique ASP (VBScript), mais je n'ai pas été de trouver TOUT pour l'analyse.

Je veux quelque chose que je peux passer une chaîne JSON et obtenir un VBScript objet quelconque (Tableau, l'écriture de Scripts.Dictionnaire, etc)

Quelqu'un peut-il recommander une bibliothèque pour l'analyse JSON en ASP Classique?

92voto

Chris Nielsen Points 7492

Gardez à l'esprit que l'ASP Classique comprend JScript ainsi que VBScript. Fait intéressant, vous pouvez l'analyser JSON à l'aide de JScript et utiliser les objets qui en résultent directement dans VBScript.

Par conséquent, il est possible d'utiliser la forme canonique https://github.com/douglascrockford/JSON-js/blob/master/json2.js dans le code côté serveur avec zéro modifications.

Bien sûr, si votre JSON inclut tous les tableaux, elles resteront JScript tableaux lorsque l'analyse est terminée. Vous pouvez accéder au contenu de la JScript tableau à partir de VBScript à l'aide de la notation point.

<%@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
%>

16voto

Shoban Points 18742

Pas sûr à ce sujet. Avez-vous vérifié ASP extrême cadre support JSON?

15voto

seanyboy Points 3170

Je ne pouvais pas obtenir l'extrême-évolution ou Chris Nielson la suggestion de travailler. Mais, la suite n'a fonctionné pour moi:

http://tforster.wik.is/ASP_Classic_Practices_For_The_21st_Century/JSON4ASP

Télécharger le "json2.min.asp"

http://tforster.wik.is/@api/deki/files/2/=json2.min.asp

Ajouter la ligne suivante au début de votre fichier ASP:

<script language="javascript" runat="server" src="json2.min.asp"></script>

Vous pouvez ensuite utiliser JSON en 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 effectuer les opérations suivantes:

   for each iTmp in testing
       if (TypeName(iTmp))<>"JScriptTypeInfo" then 
           Response.Write("Item: " &  iTmp & "<br/>")
       end if
   next

8voto

Demon Points 56

J'ai récemment mis en place un VbsJson classe, qui a un "Décoder" la méthode pour parser JSON pour VBScript et un "Coder" la méthode pour générer du JSON à partir de VBScript. Le code est un peu long, donc je n'ai pas le coller ici.

4voto

Stephen Quan Points 4429

J'ai un JSONtoXML VBScript fonction qui prend une chaîne JSON et renvoie un Microsoft.XMLDOM:

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(UCase(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(UCase(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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X