6

同様の質問が数回前に尋ねられ、回答されたことを知っています: Parsing JSON in Excel VBAExcel 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

}"

2つの翻訳文を文(0)と文(1)としてアクセスできるようにしたいです。以前の投稿の GetProperty() メソッドを使用して文オブジェクトを取得できますが、配列ではなく JScriptTypeInfo 型のオブジェクトであるため、そのメンバーにアクセスできません。

ここで説明されている方法に似た方法を使用して、文章オブジェクトを JScript の配列に変換しようとしました: How to pass arrays between javaScript and VBA。何らかの理由で、配列の最初の値を返すことしかできません。

これを行う最良の方法は何ですか?

4

1 に答える 1

12

このScriptControlオブジェクトを使用して、javascript を実行できる環境を作成できます。Web ページで 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

于 2013-02-11T23:44:26.927 に答える