2013-02-11 185 views
6

我知道了類似的問題已經被問和前幾次回答: Parsing JSON in Excel VBAExcel VBA: Parsed JSON Object Loop解析JSON對象數組在Excel VBA

然而,上述方案不一樣,如果我想獲得工作返回對象中的數組。我是從谷歌接收一個JSON對象翻譯API的格式如下:

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

}」

我希望能夠訪問這兩個句子翻譯句子爲(0)和句子(1 )。我可以使用以前帖子中的GetProperty()方法來檢索句子對象,但由於它是JScriptTypeInfo類型的對象,而不是數組,因此無法訪問其成員。在JScript中使用類似於此處所述的方法將句子對象轉換爲數組:How to pass arrays between javaScript and VBA。我只能得到它返回數組的第一個值,出於某種原因。

這樣做的最好方法是什麼?

回答

12

您可以使用ScriptControl對象創建一個可以運行javascript的環境。如果您習慣在網頁中使用JSON,那麼這可能是一個簡單的方法。

例子:

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 

如何調用使用腳本控制功能:http://support.microsoft.com/kb/184740

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

+0

你也可以去array.item(0)看到這個連結http: //stackoverflow.com/questions/5773683/excel-vba-parsed-json-object-loop/19359035#19359035 – ozmike 2013-10-14 12:54:03

+0

太棒了......它爲我工作! – 2014-03-12 19:57:18

+0

你的代碼幫助了lottttttt! – 2015-03-02 15:59:55