2013-02-11 45 views
6

Tôi biết một câu hỏi tương tự đã được hỏi và trả lời trước một vài lần: Parsing JSON in Excel VBA, Excel VBA: Parsed JSON Object LoopPhân tích một mảng đối tượng JSON trong Excel VBA

Tuy nhiên, các giải pháp trên không hoạt động nếu tôi đang cố gắng truy cập một mảng trong đối tượng được trả về. Tôi nhận được một đối tượng JSON từ Google Translate API theo định dạng sau:

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

}"

Tôi muốn để có thể truy cập vào hai câu dịch là câu (0) và câu (1 Tôi có thể sử dụng phương thức GetProperty() từ các bài trước để lấy đối tượng câu, nhưng tôi không thể truy cập các thành viên của nó bởi vì nó là một đối tượng kiểu JScriptTypeInfo, không phải là một mảng kiểu JScriptTypeInfo, chứ không phải là một mảng. chuyển đổi đối tượng câu thành một mảng trong JScript bằng cách sử dụng một cái gì đó tương tự như phương pháp được mô tả ở đây: How to pass arrays between javaScript and VBA. Tôi chỉ có thể nhận được nó trả về giá trị đầu tiên của mảng, vì một lý do nào đó.

Cách tốt nhất để làm điều này là gì?

Trả lời

12

Bạn có thể sử dụng đối tượng ScriptControl để tạo môi trường nơi bạn có thể chạy javascript. Nếu bạn đang sử dụng để làm việc với JSON trong các trang web thì đây có thể là một cách dễ dàng để đi.

Ví dụ:

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 

Làm thế nào để gọi chức năng Sử dụng Control Script: http://support.microsoft.com/kb/184740

Sử dụng ScriptControl: https://msdn.microsoft.com/en-us/library/aa227633(v=vs.60).aspx

+0

Bạn cũng có thể đi array.item (0) xem liên kết này http: //stackoverflow.com/questions/5773683/excel-vba-parsed-json-object-loop/19359035#19359035 – ozmike

+0

Fantastic ... Nó hoạt động cho tôi! –

+0

Mã của bạn đã giúp lottttttt! –

Các vấn đề liên quan