Foxtable(狐表)用户栏目专家坐堂 → 分享:json解析操作分享,感谢有点蓝等老师,希望对大家操作有所参考帮助。


  共有4021人关注过本帖树形打印复制链接

主题:分享:json解析操作分享,感谢有点蓝等老师,希望对大家操作有所参考帮助。

帅哥哟,离线,有人找我吗?
李孝春
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
分享:json解析操作分享,感谢有点蓝等老师,希望对大家操作有所参考帮助。  发帖心情 Post By:2016/11/3 22:34:00 [只看该作者]

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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6849 积分:43345 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2016/11/4 8:16:00 [只看该作者]

提示未声明变量 ConvertHelper

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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)


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/11/4 8:40:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
  发帖心情 Post By: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部分,就进行写表操作。

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107805 积分:548376 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/11/5 9:15:00 [只看该作者]

if jsonString.Contains("errcode") then
msgbox("出错")
else
 其它处理
end if

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)if jsonString.Contains("errco...  发帖心情 Post By:2016/11/5 11:54:00 [只看该作者]

有没有办法只让这个运行一次呢?
当表增加一行的时候 就提示一次 多行就提示了多次 
我想实现 同样的错误 该代码只运行一次 

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107805 积分:548376 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)Dim haserror As BooleanIf jsonStri...  发帖心情 Post By:2016/11/5 16:16:00 [只看该作者]

经测试 居然还是一样每行都在报错  

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107805 积分:548376 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/11/5 16:29:00 [只看该作者]

完整代码贴出来

 回到顶部
总数 17 1 2 下一页