2013-02-11 358 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