I Ich bin nicht erlaubt zu kommentieren, aber das ist eher ein kleiner Vorschlag zu Parfait Lösung oben. Ich hatte Probleme beim Ausführen des Codes, weil Jsonconverter fehlte.Verfolgen Sie die Schritte von Parfait, stellen Sie sicher, dass Sie auch JsonConverter als ein Modul in Access VBA enthalten. Sie können diese Module in der Excel-Datei von VBA-JSON bereitgestellt finden
Befolgen Sie diese Schritte VBA-JSON unter Zugang zu installieren.
- Laden Specs.bas als ein Modul (Import ..
)
- Excel öffnen, drücken Sie Alt + F11, öffnen Modul JSONConverter, Kopieren alle (STRG + A, STRG + C)
- OpenAccess-, drücken Sie Alt + F11, Erstellen neuer Module, Name es JsonConverter, Einfügen aller Code (STRG + V)
- Referenz Microsoft Scripting Runtime
In Ihrem Code, wenn ParseJson nicht gefunden wird, benutzen Sie diese Referenz:
Dim p As Object
Set p = JSonConverter.ParseJson(jsonStr)
Das ist mein voller Code:
Public Sub import()
''''CREATE TABLE START''''
Dim myTable As TableDef
Set myTable = CurrentDb.CreateTableDef(tablename)
myTable.Fields.Append myTable.CreateField("col1", dbText)
myTable.Fields.Append myTable.CreateField("col2", dbText)
myTable.Fields.Append myTable.CreateField("col3", dbText)
myTable.Fields.Append myTable.CreateField("col4", dbDate)
myTable.Fields.Append myTable.CreateField("col5", dbText)
CurrentDb.TableDefs.Append myTable
Application.RefreshDatabaseWindow
''''CREATE TABLE END''''
JSONImport path + myfile, tablename
End Sub
Public Sub JSONImport(ByVal path_file As String, ByVal tablename As String)
Dim db As Database, qdef As QueryDef
Dim FileNum As Integer
Dim DataLine As String, jsonStr As String, strSQL As String
Dim element As Variant
Set db = CurrentDb
' READ FROM EXTERNAL FILE
FileNum = FreeFile()
Open path_file For Input As #FileNum
' PARSE FILE STRING
jsonStr = ""
While Not EOF(FileNum)
Line Input #FileNum, DataLine
jsonStr = jsonStr & DataLine & vbNewLine
Wend
Close #FileNum
Dim p As Object
Set p = JSonConverter.ParseJson(jsonStr)
' ITERATE THROUGH DATA ROWS, APPENDING TO TABLE
For Each element In p
strSQL = "PARAMETERS [col1] Text(255), [col2] Text(255), [col3] Text(255), [col4] Date, [col5] Text(255); " _
& "INSERT INTO " & tablename & "(col1, col2, col3, col4, col5) VALUES ([col1], [col2], [col3], [col4], [col5]);"
Set qdef = db.CreateQueryDef("", strSQL)
qdef!col1 = element("fullname")
qdef!col2 = element("id")
qdef!col3 = element("text")
qdef!col4 = CDate(Replace(element("timestamp"), "T", " "))
qdef!col5 = element("user")
qdef.Execute
Next element
'Rename Fields
Dim fld As DAO.Field
Dim tdf As DAO.TableDef
Set tdf = db.TableDefs(tablename)
Set fld = tdf.Fields("col1")
fld.Name = "fullname"
Set fld = tdf.Fields("col2")
fld.Name = "id"
Set fld = tdf.Fields("col3")
fld.Name = "text"
Set fld = tdf.Fields("col4")
fld.Name = "timestamp"
Set fld = tdf.Fields("col5")
fld.Name = "user"
db.Close
Set db = Nothing
Set fld = Nothing
Set tdf = Nothing
Set element = Nothing
Set p = Nothing
Set qdf = Nothing
End Sub
Meine JSON Struktur:
{
"fullname": "Henry Timor",
"id": "141217245735560741",
"text": "How must it feel to know you have lost.",
"timestamp": "2015-07-22T05:45:06",
"user": "henry_t"
}
Sie könnten auch die JSON-Module sehen hier: https://github.com/CactusData/VBA.CVRAPI ... Sammlungen unter Verwendung der Daten zu halten. Es dauert ein wenig, aber VBA und JSON sind nicht füreinander gemacht - es gibt keine einfachen oder intelligenten Lösungen. – Gustav
Können Sie einige Beispiel-JSON wie Sie haben, und resultierende DB-Tabelle (n), die Sie als Ergebnis erhalten möchten? Betrachten Sie [diese Methode] (http://stackoverflow.com/a/30494373/2165759) auch. – omegastripes
Ihre Frage impliziert, dass Sie mit VBA nicht zufrieden sind, irre ich mich darin? –