以文本方式查看主题 - 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=149806) |
-- 作者:huangxueyao -- 发布时间:2020/5/12 17:58:00 -- 关于一个JSON的调用问题 以下代码,执行的时候,在循环体内,第一次没问题,循环到第二次的时候就会提示出错:意外被中断 详细错误信息: Error reading JObject from JsonReader. Path \'\', line 0, position 0. 请问是什么原因? ------------------------------ Dim tb5 As Table = e.form.controls("table5").Table Dim tb2 As Table = e.form.controls("table2").Table If tb2.rows.count < 1 Then msgbox("请先加载商品数据") Return End If If tb5.Cols.contains("商品id") = False Then msgbox("请先加载已有数据") Return End If SystemReady = False try Forms("正在更新提示").open tb5.StopRedraw Dim stToken As String = Functions.Execute("SYS_API获取有赞token") If stToken IsNot Nothing AndAlso stToken.length > 0 Then Dim hc As New HttpClient("https://open.youzanyun.com/api/youzan.item.sku.list/1.0.0?access_token=" & stToken) hc.C Dim k As Integer = 0 \'循环第几轮 Dim m As Integer = tb2.rows.count m = m -1 Dim n As Integer = 0 \'当前记录 Dim jo As New JObject Do While n < m Dim joC As New JObject joC("param") = New JObject joC("param")("use_cache") = False Dim ja As New Jarray \'定义数组 Do While True If n < m AndAlso (n - k * 20) < 20 Then If tb2.rows(n)("售卖状态") = "1" OrElse tb2.rows(n)("售卖状态") = "2" Then ja.Add(tb2.rows(n)("商品ID")) n = n + 1 Else n = n + 1 End If Else Exit Do End If Loop k = k + 1 joC("param")("item_ids") = ja \'将Roles设置为前面定义的数组 hc.Content =CompressJson(joC) jo = JObject.Parse(hc.GetData) If jo("success") IsNot Nothing AndAlso jo("success").tostring = "true" Then Dim st As New Date(1970,1,1,8,0,0) Dim drc As DataRow For Each jp As object In jo("data") For Each jt As JToken In jo("data")(jp.Name) If jt("combinSku").tostring = "false" Then drc = tb5.DataTable.addnew drc("商品ID") = jt("itemId").tostring drc("规格ID") = jt("skuId").tostring drc("规格编码") = jt("code").tostring If jt("sku") IsNot Nothing Then Dim stN As String = "" For Each jt2 As JToken In JArray.Parse(jt("sku").tostring) stN = stN & "_" & jt2("v").tostring Next drc("规格名称") = stN.Trim("_") End if drc("规格售价") = Val(jt("price").tostring) / 100 drc("规格库存") = Val(jt("stockNum").tostring) Dim timestamp As Integer = Val(jt("updateTime").tostring) drc("更新时间") = st.AddSeconds(timestamp) drc("同步状态") = "已同步" End If Next Next End If Loop Else msgbox("错误:无法获取有赞token") End If Catch ex As Exception MessageBox.Show("操作失败") Forms("正在更新提示").close SystemReady = True End Try Forms("正在更新提示").close tb5.ResumeRedraw SystemReady = True |
-- 作者:有点蓝 -- 发布时间:2020/5/12 20:10:00 -- 可能接口没有返回数据 joC("param")("item_ids") = ja \'将Roles设置为前面定义的数组 hc.Content =CompressJson(joC) dim ret as string = hc.GetData msgbox(ret) jo = JObject.Parse(ret) |
-- 作者:huangxueyao -- 发布时间:2020/5/13 15:06:00 -- 原因找到了,要把 Dim hc As New HttpClient("https://open.youzanyun.com/api/youzan.item.sku.list/1.0.0?access_token=" & stToken) 写在循环体内。 也就是每次调用时,要重新定义。
|