以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 分享:json解析操作分享,感谢有点蓝等老师,希望对大家操作有所参考帮助。 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=92460) |
-- 作者:李孝春 -- 发布时间:2016/11/3 22:34:00 -- 分享:json解析操作分享,感谢有点蓝等老师,希望对大家操作有所参考帮助。 Javascript是大小写敏感 的,要关闭代码编辑器的着色功能 \'... Dim postdata As String ="{""type"":""news"",""offset"":""0"",""count"":""2000""}" Dim url = String.Format("https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=CQC8IZ77bPftBxnEovxmIbhx3EQ7PdSzDXaPl2ag9W5ky6l3Cis8camkkZVOuvJxurMjfXJH3hALFXBxfQLJiBiFlEJA8-r7hRpBqsIIEitSSORhf22AtVZMBk1oUkGeGWKfAIASIW") Using ms As New System.IO.MemoryStream() Dim bytes = ConvertHelper.EncodingToBytes(postdata, System.Text.Encoding.UTF8) ms.Write(bytes, 0, bytes.Length) ms.Seek(0, System.IO.SeekOrigin.Begin) Dim jsonString = Functions.Execute("HttpPost",url, ms) \'通过POST向接口传输菜单数据,并取得返回结果 Dim json As String = jsonString Dim ScriptControl As Object, data As Object, JscriptCode As String JscriptCode = "function toObject(json) {eval(""var o=""+json);return o;}" ScriptControl = CreateObject("MSScriptControl.ScriptControl") With ScriptControl .Language = "Javascript" .Timeout = -1 .AddCode(JscriptCode) data = .Run("toObject", json) End With output.Show(json) Dim dr As DataRow For Each obj As object In data.item For Each item As object In obj.content.news_item dr = DataTables("表A").AddNew dr("第六列") = obj.media_id Dim BaseDatetime As New DateTime(1970, 1, 1) \'Output.Show(BaseDatetime.AddSeconds(1476065493).AddHours(8)) dr("第二列") = BaseDatetime.AddSeconds(obj.update_time).AddHours(8) dr("第一列") = item.title dr("第三列") = item.url dr("第四列") = item.content_source_url dr("第五列") = item.author Next Next End Using
[此贴子已经被作者于2016/11/4 1:40:27编辑过]
|
-- 作者:lihe60 -- 发布时间:2016/11/4 8:16:00 -- 提示未声明变量 ConvertHelper |
-- 作者:有点色 -- 发布时间:2016/11/4 8:35:00 -- 以下是引用lihe60在2016/11/4 8:16:00的发言:
提示未声明变量 ConvertHelper
Dim bytes = ConvertHelper.EncodingToBytes(postdata, System.Text.Encoding.UTF8)
改成
Dim bytes = Encoding.GetEncoding("UTF-8").GetBytes(postdata) |
-- 作者:有点色 -- 发布时间:2016/11/4 8:40:00 -- httpPost函数参考
http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=73839&replyID=509448&skin=1
|
-- 作者:李孝春 -- 发布时间:2016/11/5 0:46:00 -- 有点色老师,顶楼操作虽然可以实现想要获取的数据,但是如果接口不对,密钥不对,接口操作操作限制次数,均会报如下错误: 格式如下: {"errcode":45009,"errmsg":"reach max api daily quota limit hint: [.bOt70356e562]"} 然后会有一个错误弹出框出现,提示错误,因为没有得到json文件,所以就不会有list公共内容部分,老弹出来严重影响操作, 有没有办法增加一个判断代码呢? 正常情况下,获取图文群发每日数据接口的返回JSON数据包如下: { "list": [ { "ref_date": "2014-12-08", "msgid": "10000050_1", "title": "12月27日 DiLi日报", "int_page_read_user": 23676, "int_page_read_count": 25615, "ori_page_read_user": 29, "ori_page_read_count": 34, "share_user": 122, "share_count": 994, "add_to_fav_user": 1, "add_to_fav_count": 3 } //后续会列出该日期内所有被阅读过的文章(仅包括群发的文章)在当天的阅读次数等数据 ] } 如果返回的josn内容有errcode部分,就直接取消写表操作,弹出“45009,接口操作次数”的提示! 如果返回的JOSN内容有list部分,就进行写表操作。
|
-- 作者:有点蓝 -- 发布时间:2016/11/5 9:15:00 -- if jsonString.Contains("errcode") then msgbox("出错") else 其它处理 end if
|
-- 作者:李孝春 -- 发布时间:2016/11/5 11:54:00 -- 回复:(有点蓝)if jsonString.Contains("errco... 有没有办法只让这个运行一次呢? 当表增加一行的时候 就提示一次 多行就提示了多次 我想实现 同样的错误 该代码只运行一次
|
-- 作者:有点蓝 -- 发布时间:2016/11/5 14:12:00 -- Dim haserror As Boolean If jsonString.Contains("errcode") Then If not haserror Then msgbox("出错") haserror = True End If Else 其它处理 End If |
-- 作者:李孝春 -- 发布时间:2016/11/5 16:16:00 -- 回复:(有点蓝)Dim haserror As BooleanIf jsonStri... 经测试 居然还是一样每行都在报错 |
-- 作者:有点蓝 -- 发布时间:2016/11/5 16:29:00 -- 完整代码贴出来 |