【问题标题】:Parsing a JSON object array in Excel VBA在 Excel VBA 中解析 JSON 对象数组
【发布时间】:2013-02-11 23:10:54
【问题描述】:

我知道之前有人问过并回答过类似的问题几次: Parsing JSON in Excel VBA, Excel VBA: Parsed JSON Object Loop

但是,如果我试图访问返回对象中的数组,则上述解决方案不起作用。我从 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

}"

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

我尝试使用类似于此处描述的方法将句子对象转换为 JScript 中的数组:How to pass arrays between javaScript and VBA。出于某种原因,我只能让它返回数组的第一个值。

最好的方法是什么?

【问题讨论】:

    标签: javascript json excel vba jscript


    【解决方案1】:

    您可以使用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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2011-10-01
    • 2011-08-04
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多