2017-09-28 12 views
3

I der folgende Code VBA-Code (für eine Excel-Modul)ein Variant/Objekt/JScriptTypeInfo Eigenschaft in VBA Zugriff

Function getDesc(ByVal pCode As String) As String 
    Dim oRequest As Object 
    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 
    oRequest.Open "GET", "https://my.url.com/?filter=CODE=" & pCode, False 
    oRequest.SetRequestHeader "Accept", "application/json" 
    oRequest.Send "" 

    Set props = jsonDecode(oRequest.ResponseText) 

    getDesc = props.row_data 
End Function 

Function jsonDecode(jsonString As Variant) 
    Set sc = CreateObject("ScriptControl"): sc.Language = "JScript" 
    Set jsonDecode = sc.Eval("(" + jsonString + ")") 
End Function 

Die Ergebnisse wurden als props.row_data enter image description here

gezeigt ist, kann ich Wie finde ich die Eigenschaft LONG_DESCRIPTION zu getDesc =?

Was ist die richtige Syntax, die ich brauche? Alternativ werde ich fast jede Lösung akzeptieren, die es mir ermöglicht, die Zeichenfolge LONG_DESCRIPTION zurückzugeben.

+0

Bitte posten Sie 'oRequest.ResponseText' Inhalt, mindestens ein relevanter Teil. – omegastripes

+0

Beachten Sie, dass Sie mithilfe von ScriptControl ActiveX das System anfällig für einen schädlichen JS-Code in der Antwort machen können. Sehen Sie sich [diese Antwort] (https://stackoverflow.com/a/30494373/2165759) und [VBA-JSON-Parser auf GitHub] an (https://github.com/omegastripes/VBA-JSON-parser). . – omegastripes

+0

Die Verwendung dieser Bibliothek kann hier helfen https://github.com/VBA-tools/VBA-JSON –

Antwort

1

Versuchen Sie den folgenden Code. Importieren Sie das Modul JSON.bas in das VBA-Projekt für die JSON-Verarbeitung.

Option Explicit 

Function getDesc(ByVal pCode As String) As String 

    Dim oRequest As Object 
    Dim sJSONString As String 
    Dim vJSON As Variant 
    Dim sState As String 

    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 
    oRequest.Open "GET", "https://my.url.com/?filter=CODE=" & pCode, False 
    oRequest.SetRequestHeader "Accept", "application/json" 
    oRequest.Send 
    sJSONString = oRequest.ResponseText 
    JSON.Parse sJSONString, vJSON, sState 
    getDesc = vJSON("row_data")(0)("LONG_DESCRIPTION") 

End Function 

mit JSON-String Getestet {'row_data':[{'LONG_DESCRIPTION':'desc_string'}]}.