在VBA里面如何读取json字符串?
想实现一个操作,在VBA里面读取现成的json字符串,
然后把其中每一项的值插入到EXCEL表中
像下面这样调用JS虽然也能实现,但是存在两个问题
1)因为这个json字符串里面的值是不固定的,
所以像下面那种直接引用KEY的名字的做法,有时会出错误。
想加一个对这个KEY是否存在的判断。
2)像下面那样引用的话,有的时候VBA会自动把KEY的打头字母变成大写
例如把data变成Data,这样就跟KEY名不一致了,又会产生错误
请高手指教
Dim cnsJSONString As String
cnsJSONString = txtJson.Text
Dim sc As Object
Dim strFunc As String
Dim objJSON As Object
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
strFunc = "function jsonParse(s) { return eval('(' + s + ')'); }"
sc.AddCode strFunc
Set objJSON = sc.CodeObject.jsonParse(cnsJSONString)
MsgBox objJSON.familyname
Set objJSON = Nothing
Set sc = Nothing
[最优解释]
不懂Json,帮顶
[其他解释]
1)因为这个json字符串里面的值是不固定的,
所以像下面那种直接引用KEY的名字的做法,有时会出错误。
想加一个对这个KEY是否存在的判断。
--思路是嗲用一个js函数,在这个函数里面判断,大致代码如下:
jscode = "var obj;function _Callback(o){obj=o;return 1;};function fcal(s){ return eval(s);};function getval(name){t=eval('typeof obj.'+name );if(t!='undefined'){ return eval('obj.'+name)};return ""};"
Set js = CreateObject("ScriptControl")
js.Language = "JavaScript"
js.AddCode jscode
Dim i As Integer
i = js.Run("fcal", "_Callback({result:1,name:""tom"",age:20})")
MsgBox js.Run("getval", "result")
Rem 不存在的字段只会返回空串,不会报错
MsgBox js.Run("getval", "not_result")
2)像下面那样引用的话,有的时候VBA会自动把KEY的打头字母变成大写
例如把data变成Data,这样就跟KEY名不一致了,又会产生错误
-- 我测试的结果是:vba自动给你改成大学的是关键字,例如name val等,你自己的json最好用个性化的名字,例如strname, iage等。