Parsing JSON in Excel VBA

后端 未结 11 1049
长发绾君心
长发绾君心 2020-11-22 09:58

I have the same issue as in Excel VBA: Parsed JSON Object Loop but cannot find any solution. My JSON has nested objects so suggested solution like VBJSON and vba-json do not

11条回答
  •  忘掉有多难
    2020-11-22 10:36

    Microsoft: Because VBScript is a subset of Visual Basic for Applications,...

    The code below is derived from Codo's post should it also be helpful to have in class form, and usable as VBScript:

    class JsonParser
        ' adapted from: http://stackoverflow.com/questions/6627652/parsing-json-in-excel-vba
        private se
        private sub Class_Initialize
            set se = CreateObject("MSScriptControl.ScriptControl") 
            se.Language = "JScript"
            se.AddCode "function getValue(jsonObj, valueName) { return jsonObj[valueName]; } "
            se.AddCode "function enumKeys(jsonObj) { var keys = new Array(); for (var i in jsonObj) { keys.push(i); } return keys; } "
        end sub
        public function Decode(ByVal json)
            set Decode = se.Eval("(" + cstr(json) + ")")
        end function
    
        public function GetValue(ByVal jsonObj, ByVal valueName)
            GetValue = se.Run("getValue", jsonObj, valueName)
        end function
    
        public function GetObject(ByVal jsonObject, ByVal valueName)
            set GetObjet = se.Run("getValue", jsonObject, valueName)
        end function
    
        public function EnumKeys(ByVal jsonObject)
            dim length, keys, obj, idx, key
            set obj = se.Run("enumKeys", jsonObject)
            length = GetValue(obj, "length")
            redim keys(length - 1)
            idx = 0
            for each key in obj
                keys(idx) = key
                idx = idx + 1
            next
            EnumKeys = keys
        end function
    end class
    

    Usage:

    set jp = new JsonParser
    set jo = jp.Decode("{value: true}")
    keys = jp.EnumKeys(jo)
    value = jp.GetValue(jo, "value")
    

提交回复
热议问题