2013-02-11 29 views
6

Znam podobne pytanie zostało zadane i odpowiedzi przed kilka razy: Parsing JSON in Excel VBA, Excel VBA: Parsed JSON Object Loopanalizowania tablicę obiektów JSON w Excel VBA

Jednakże, powyższe rozwiązanie nie działa, gdy próbuję dostęp tablica wewnątrz zwróconego obiektu. Otrzymuję obiekt JSON z Google Translate API w następującym formacie:

"{ 
"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 

}”

Chcę mieć dostęp do dwóch przetłumaczonych zdań jako zdań (0) i (1 zdań Mogę użyć metody GetProperty() z poprzednich postów, aby pobrać obiekt zdań, ale nie mogę uzyskać dostępu do jego elementów, ponieważ jest to obiekt typu JScriptTypeInfo, a nie tablica. przekonwertuj obiekt zdań na tablicę w JScript, używając czegoś podobnego do metody opisanej tutaj: How to pass arrays between javaScript and VBA. Mogę ją tylko zmusić do zwraca pierwszą wartość tablicy z jakiegoś powodu.

Jaki byłby najlepszy sposób na zrobienie tego?

Odpowiedz

12

Można użyć obiektu ScriptControl, aby utworzyć środowisko, w którym można uruchomić javascript. Jeśli jesteś przyzwyczajony do pracy z JSONem na stronach internetowych, to może to być prosta droga.

Przykład:

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 

Jak wywołać funkcje Korzystanie z funkcji Sterowanie Scenariusz: http://support.microsoft.com/kb/184740

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

+0

Można też przejść array.item (0) zobaczyć ten link http: //stackoverflow.com/questions/5773683/excel-vba-parsed-json-object-loop/19359035#19359035 – ozmike

+0

Fantastyczne ... Udało się to dla mnie! –

+0

Twój kod pomógł dużo! –