在Excel VBA中解析JSON对象数组

use*_*989 6 javascript excel vba json jscript

我知道在几次之前已经提出并回答了类似的问题: 在Excel VBA中解析JSON, Excel VBA:解析的JSON对象循环

但是,如果我尝试访问返回对象中的数组,则上述解决方案不起作用.我以下列格式从Google Translate API收到JSON对象:

"{
"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
Run Code Online (Sandbox Code Playgroud)

}"

我希望能够将两个翻译的句子作为句子(0)和句子(1)来访问.我可以使用之前帖子中的GetProperty()方法来检索句子对象,但我无法访问其成员,因为它是JScriptTypeInfo类型的对象,而不是数组.

我试图使用类似于此处描述的方法将句子对象转换为JScript中的数组:如何在javaScript和VBA之间传递数组.出于某种原因,我只能让它返回数组的第一个值.

最好的方法是什么?

Tim*_*ams 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
Run Code Online (Sandbox Code Playgroud)

如何使用脚本控件调用函数:http: //support.microsoft.com/kb/184740

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