2013-10-14 8 views
11

Ich habe ein Json wie unten:Wie kann JSON mit VBA ohne externe Bibliotheken analysiert werden?

{"sentences":[{"trans":"something ru","orig":"english word","translit":"Angliyskoye slovo","src_translit":""}], "src":"en","server_time":69} 

und es analysieren:

Function jsonDecode(jsonString As Variant) 
    Set sc = CreateObject("ScriptControl"): sc.Language = "JScript" 
    Set jsonDecode = sc.Eval("(" + jsonString + ")") 
End Function 

Set arr = jsonDecode(txt) 

In Folge arr Werte wie unten enthält (bei Uhren markiert):

arr 
- sentences (type: Variant/Object/JScriptTypeInfo) 
    - 0 (type: Variant/Object/JScriptTypeInfo) 
    - orig (type: Variant/String) 
    - trans (type: Variant/String) 
    ... 
    - Item 1 (type: Variant/Object/JScriptTypeInfo) 
    - orig (type: Variant/String) 
    - trans (type: Variant/String) 
    ... 
- server_time 
- src 

arr.src funktioniert gut , aber wie kann ich arr.sentences(0).trans bekommen? Erstens ersetzt VBA sentences durch Sentences, zweitens (wenn ich versucht habe, den Json manuell zu ändern), erlaubt es immer noch nicht, sentenses(0) zu verwenden.

+1

möglich Duplikat [Parsing JSON in Excel VBA] (http://stackoverflow.com/Fragen/6627652/Parsing-json-in-Excel-VBA) Schauen Sie sich [erste Antwort] (http://stackoverflow.com/a/7300926/1316573) –

+0

[Parsing JSON mit VBA mit ** Beispieldatei **] (http://stackoverflow.com/questions/16817545/handle-json-object-in-xmlhttp-response-in-excel-vba-code/16851758#16851758) – Santosh

+2

@DanielCook, meine Excel 2010 doe erkennt ScriptControl nicht von dieser Antwort. –

Antwort

-3

im obigen Beispiel - ersetzt [und] mit (und) scheint zu funktionieren. Obwohl dies nicht streng JSON Format ist.

Dann verweisen Sie mit arr.sentences.trans

Bitte beachten Sie, ich Mine geändert zu sentences2 als Sätze scheint für eine eingebaute Eigenschaft reserviert werden.

1

Mit JavaScript-Funktionen zum Parsen von JSON können wir, zusätzlich zu ScriptControl, einen Parser in VBA erstellen, der alle Datenpunkte innerhalb des JSON auflistet. Unabhängig davon, wie verschachtelt oder komplex die Datenstruktur ist, wird dieser Parser, solange wir einen gültigen JSON bereitstellen, eine vollständige Baumstruktur zurückgeben.

JavaScript Die Methoden Eval, getKeys und getProperty bieten Bausteine ​​zum Überprüfen und Lesen von JSON.

Gekoppelt mit einer rekursiven Funktion in VBA können wir alle Schlüssel (bis zur n-ten Ebene) in einer JSON-Zeichenfolge durchlaufen. Mit einem Tree-Steuerelement (in diesem Artikel) oder einem Wörterbuch oder sogar einem einfachen Arbeitsblatt können wir die JSON-Daten nach Bedarf anordnen.

Voll Code hier: JSON Parser in VBA

7

ich dieses Skript Beispiel nützlich gefunden haben (von http://www.mrexcel.com/forum/excel-questions/898899-json-api-excel.html#post4332075):

Sub getData() 

    Dim Movie As Object 
    Dim scriptControl As Object 

    Set scriptControl = CreateObject("MSScriptControl.ScriptControl") 
    scriptControl.Language = "JScript" 

    With CreateObject("MSXML2.XMLHTTP") 
     .Open "GET", "http://www.omdbapi.com/?t=frozen&y=&plot=short&r=json", False 
     .send 
     Set Movie = scriptControl.Eval("(" + .responsetext + ")") 
     .abort 
     With Sheets(2) 
      .Cells(1, 1).Value = Movie.Title 
      .Cells(1, 2).Value = Movie.Year 
      .Cells(1, 3).Value = Movie.Rated 
      .Cells(1, 4).Value = Movie.Released 
      .Cells(1, 5).Value = Movie.Runtime 
      .Cells(1, 6).Value = Movie.Director 
      .Cells(1, 7).Value = Movie.Writer 
      .Cells(1, 8).Value = Movie.Actors 
      .Cells(1, 9).Value = Movie.Plot 
      .Cells(1, 10).Value = Movie.Language 
      .Cells(1, 11).Value = Movie.Country 
      .Cells(1, 12).Value = Movie.imdbRating 
     End With 
    End With 

End Sub 
Verwandte Themen