2013-02-11 22 views
6

मैं जानता हूँ कि एक समान प्रश्न पूछा गया है और कई बार से पहले उत्तर दिया: Parsing JSON in Excel VBA, Excel VBA: Parsed JSON Object Loopएक्सेल VBA में एक JSON ऑब्जेक्ट सरणी पार्स

हालांकि, इसके बाद के संस्करण समाधान अगर मैं का उपयोग करने की कोशिश कर रहा हूँ काम नहीं करता है लौटे ऑब्जेक्ट के भीतर एक सरणी। मैं गूगल से एक 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() विधि का उपयोग कर सकता हूं, लेकिन मैं अपने सदस्यों तक नहीं पहुंच सकता क्योंकि यह जेस्क्रिप्ट टाइप टाइपो का एक ऑब्जेक्ट है, एक सरणी नहीं है।

मैंने कोशिश की है यहां वर्णित विधि के समान कुछ का उपयोग करके वाक्य ऑब्जेक्ट को जेस्क्रिप्ट में एक सरणी में कनवर्ट करें: How to pass arrays between javaScript and VBA। मैं इसे केवल प्राप्त कर सकता हूं कुछ कारणों से, सरणी का पहला मान वापस करें।

ऐसा करने का सबसे अच्छा तरीका क्या होगा?

उत्तर

12

आप ScriptControl ऑब्जेक्ट का उपयोग ऐसे वातावरण को बनाने के लिए कर सकते हैं जहां आप जावास्क्रिप्ट चला सकते हैं। यदि आप वेब पृष्ठों में 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 

स्क्रिप्ट नियंत्रण का उपयोग करते हुए कार्य कॉल करने के लिए: ScriptControl का उपयोग http://support.microsoft.com/kb/184740

: 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

+0

शानदार ... यह मेरे लिए काम करता है! –

+0

आपके कोड ने एक बहुत मदद की! –

संबंधित मुद्दे