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.