2013-02-11 16 views
6

so una domanda simile è stato chiesto e ha risposto prima di un paio di volte: Parsing JSON in Excel VBA, Excel VBA: Parsed JSON Object Loopanalisi di un array di oggetti JSON in Excel VBA

Tuttavia, la soluzione di cui sopra non funziona se sto cercando di accesso una matrice all'interno dell'oggetto restituito. Ricevo un oggetto JSON dal Google Translate API nel seguente formato:

"{ 
"sentences":[ 
    { 
     "trans":"Responsibility\n", 
     "orig":"??", 
     "translit":"", 
     "src_translit":"Zérèn" 
    }, 
    { 
     "trans":"Department", 
     "orig":"??", 
     "translit":"", 
     "src_translit":"Bùmén" 
    } 
], 
"src":"zh-CN", 
"server_time":86 

}"

Voglio essere in grado di accedere alle due frasi tradotte da frasi (0) e le frasi (1 Posso usare il metodo GetProperty() dai post precedenti per recuperare l'oggetto frasi, ma non posso accedere ai suoi membri perché è un oggetto di tipo JScriptTypeInfo, non un array.

Ho provato a convertire l'oggetto frasi in una matrice in JScript usando qualcosa di simile al metodo descritto qui: How to pass arrays between javaScript and VBA. Posso solo farlo in restituire il primo valore dell'array, per qualche motivo.

Quale sarebbe il modo migliore per farlo?

risposta

12

È possibile utilizzare l'oggetto ScriptControl per creare un ambiente in cui è possibile eseguire javascript. Se sei abituato a lavorare con JSON nelle pagine web, questo può essere un modo facile.

Esempio:

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 

Come chiamare le funzioni utilizzando il controllo Script: http://support.microsoft.com/kb/184740

Utilizzando la ScriptControl: https://msdn.microsoft.com/en-us/library/aa227633(v=vs.60).aspx

+0

Si può anche andare array.item (0) vedi questo link http: //stackoverflow.com/questions/5773683/excel-vba-parsed-json-object-loop/19359035#19359035 – ozmike

+0

Fantastico ... Ha funzionato per me! –

+0

Il tuo codice ha aiutato un lottttttt! –