2016-04-05 12 views
0

Ich habe versucht, die Methode in einem anderen Thread zu folgen, aber es gibt bestimmte Teile im Code, die ich nicht verstehe, und es hat nicht für mich funktioniert. Und ich könnte kommentieren, da ich 50 Reputationen nicht erreicht habe. (Ich habe die Antwort von dem anderen Thread)Analysiere JSON-Array in Excel VBA

Ich versuche, auf Json Antwort wie folgt zuzugreifen, möchte ich das Array nach Details in Excel horizontal (Spalte A1-A6), aber in dem anderen Beitrag, Ich verstehe nicht, was die Skriptsteuerungsmethode ist.

Und es gab keine Kommentarzeile zu erklären, was es ist. Und ich versuchte, es zu benutzen, nur den Code bei sc.Eval fehlgeschlagen „var obj = (“ & json & „)“

Auch die Linie json = {bekommen json hier} ist fehlgeschlagen, stattdessen ersetzt ich das Json = resp, wobei resp die Ausgabe von der API zurückgegeben wird.

Ihre Hilfe wird sehr geschätzt.

Sub Tester() 

    Dim json As String 
    Dim sc As Object 
    Dim o 

    Set sc = CreateObject("scriptcontrol") 
    sc.Language = "JScript" 

    json = {get your json here} 

    sc.Eval "var obj=(" & json & ")" 'evaluate the json response 
    'add some accessor functions 
    sc.AddCode "function getSentenceCount(){return obj.sentences.length;}" 
    sc.AddCode "function getSentence(i){return obj.sentences[i];}" 

    Debug.Print sc.Run("getSentenceCount") 

    Set o = sc.Run("getSentence", 0) 
    Debug.Print o.trans, o.orig 
End Sub 

JSON-Antwort von API

 {"details":[ 
     { 
     "trade":"Micro", 
     "trade_tenor":"5yr+" 
     }, 
     { 
     "trade":"Odd", 
     "trade_tenor":"10yr+" 
     }, 
     { 
     "trade":"Round", 
     "trade_tenor":"20yr+" 
     } ]} 
+0

"Ich habe versucht, das Verfahren in einem anderen Thread zu folgen" - was Thread ist das? Ihr Code wird nicht kompiliert - Sie haben 'json' als String deklariert, aber dann versucht, etwas zuzuordnen, das kein String ist. –

+0

Hallo, das ist der Beispielcode, den ich bekommen habe. http://stackoverflow.com/questions/14822672/parsing-a-json-object-array-in-excel-vba – Vinnie

+0

Ich habe etwas ähnliches getan, ich habe http.responsetext-Methode in VBA, und ich verarbeitet die Antwort als Zeichenfolge und es hat funktioniert. In diesem Fall stellt sich die Antwort jedoch als Array dar, so dass mein vorheriger Code hier nicht zutrifft, da ich einen JSON-Parser zur Verarbeitung von Schlüsselname verwendet habe. – Vinnie

Antwort

1

braucht nur einige kleinere Änderungen:

Sub Tester() 

    Dim json As String 
    Dim sc As Object 
    Dim o, i, num 

    Set sc = CreateObject("scriptcontrol") 
    sc.Language = "JScript" 

    json = Range("A1").Value '{get your json here} 

    sc.Eval "var obj=(" & json & ")" 'evaluate the json response 
    'add some accessor functions 
    sc.AddCode "function getTradeCount(){return obj.details.length;}" 
    sc.AddCode "function getTrade(i){return obj.details[i];}" 

    num = sc.Run("getTradeCount") 

    For i = 0 To num - 1 
     Set o = sc.Run("getTrade", i) 
     Debug.Print o.trade, o.trade_tenor 
    Next i 

End Sub 
+0

Hallo Tim, danke für die Antwort. Ich habe den Code benutzt und einige Änderungen vorgenommen. aber ich bekomme Syntaxfehler auf sc.Eval "var obj = (" & json & ")", ich habe versucht, Doppelzitat vor und nach & wie in anderen Thread vorgeschlagen, um Syntaxfehler zu lösen. aber es hat immer noch nicht funktioniert. Außerdem habe ich den Code ein wenig modifiziert, um meine Antwort von der API als solcher zurückzugeben, Dim json As String: json = Http.ResponseText in der ersten Zeile. – Vinnie

+0

Funktioniert genau wie für mich gepostet: Ich nahm den JSON von Ihrer Frage und fügte es zum Testen in A1. Wenn Sie Ihre Frage aktualisieren können, um Ihren aktuellen Code anzuzeigen, und überprüfen Sie, ob der JSON korrekt ist, kann ich einen Blick darauf werfen. –

+0

Hallo Tim, ich habe es geschafft, es jetzt zu arbeiten. Vielen Dank. Jetzt muss ich einen Weg finden, sie von A2-A7 horizontal in die Tabelle zurück zu legen. müssen die debug.print ändern. Vielen Dank für deine Hilfe. – Vinnie