Saltar al contenido

¿Hay un analizador JSON para VB6 / VBA?

Contamos con tu ayuda para compartir nuestros escritos acerca de las ciencias informáticas.

Solución:

Visite JSON.org para obtener una lista actualizada (consulte la parte inferior de la página principal) de analizadores JSON en muchos idiomas diferentes. Al momento de escribir este artículo, verá un enlace a varios analizadores JSON diferentes allí, pero solo uno es para VB6/VBA (los otros son .NET):

  • VB-JSON

    • Cuando traté de descargar el archivo zip, Windows dijo que los datos estaban dañados. Sin embargo, pude usar 7-zip para extraer los archivos. Resulta que la “carpeta” principal en el archivo zip no es reconocida como una carpeta por Windows, por 7-zip puede ver el contenido de esa “carpeta” principal, por lo que puede abrirla y luego extraer los archivos en consecuencia. .
    • La sintaxis real de esta biblioteca VB JSON es realmente simple:

      Dim p As Object
      Set p = JSON.parse(strFormattedJSON)
      
      'Print the text of a nested property '
      Debug.Print p.Item("AddressClassification").Item("Description")
      
      'Print the text of a property within an array '
      Debug.Print p.Item("Candidates")(4).Item("ZipCode")
      
    • Nota: Tuve que agregar la biblioteca “Microsoft Scripting Runtime” y “Microsoft ActiveX Data Objects 2.8” como referencias a través de Herramientas > Referencias en el editor de VBA.
    • Nota: el código VBJSON en realidad se basa en un proyecto de código de Google vba-json. Sin embargo, VBJSON promete varias correcciones de errores de la versión original.

Basado en la solución ozmike, que no funcionó para mí (Excel 2013 e IE10). El motivo es que no pude llamar a los métodos en el objeto JSON expuesto. Entonces, sus métodos ahora están expuestos a través de funciones adjuntas a un DOMElement. No sabía que esto era posible (debe ser eso de IDispatch), gracias Ozmike.

Como dijo ozmike, no hay librerías de terceros, solo 30 líneas de código.

Option Explicit

Public JSON As Object
Private ie As Object

Public Sub initJson()
    Dim html As String

    html = ""

    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .navigate "about:blank"
        Do While .Busy: DoEvents: Loop
        Do While .readyState <> 4: DoEvents: Loop
        .Visible = False
        .document.Write html
        .document.Close
    End With

    ' This is the body element, we call it JSON:)
    Set JSON = ie.document.getElementById("JSONElem")

End Sub

Public Function closeJSON()
    ie.Quit
End Function

La siguiente prueba construye un objeto JavaScript desde cero y luego lo encadena. Luego analiza el objeto de nuevo e itera sobre su keys.

Sub testJson()
    Call initJson

    Dim jsObj As Object
    Dim jsArray As Object

    Debug.Print "Construction JS object ..."
    Set jsObj = JSON.Parse("")
    Call jsObj.setItem("a", 1)
    Set jsArray = JSON.Parse("[]")
    Call jsArray.setItem(0, 13)
    Call jsArray.setItem(1, Math.Sqr(2))
    Call jsArray.setItem(2, 15)
    Call jsObj.setItem("b", jsArray)

    Debug.Print "Object: " & JSON.stringify(jsObj, 4)

    Debug.Print "Parsing JS object ..."
    Set jsObj = JSON.Parse("""a"":1,""b"":[13,1.4142135623730951,15]")

    Debug.Print "a: " & jsObj.getItem("a")
    Set jsArray = jsObj.getItem("b")
    Debug.Print "Length of b: " & jsArray.getItem("length")
    Debug.Print "Second element of b: "; jsArray.getItem(1)

    Debug.Print "Iterate over all keys ..."
    Dim keys As Object
    Set keys = jsObj.getKeys("all")

    Dim i As Integer
    For i = 0 To keys.getItem("length") - 1
        Debug.Print keys.getItem(i) & ": " & jsObj.getItem(keys.getItem(i))
    Next i

    Call closeJSON
End Sub

salidas

Construction JS object ...
Object: 
    "a": 1,
    "b": [
        13,
        1.4142135623730951,
        15
    ]

Parsing JS object ...
a: 1
Length of b: 3
Second element of b:  1,4142135623731 
Iterate over all keys ...
a: 1
b: 13,1.4142135623730951,15

Con suerte, esto será de gran ayuda para otros que siguen viniendo a esta página después de buscar “vba json”.

Encontré esta página muy útil. Proporciona varias clases de VBA compatibles con Excel que se ocupan del procesamiento de datos en formato JSON.

Si te sientes suscitado, puedes dejar una reseña acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *