Foxtable(狐表)用户栏目专家坐堂 → 如何解析JSON


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

主题:如何解析JSON

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


加好友 发短信
等级:二尾狐 帖子:517 积分:3383 威望:0 精华:0 注册:2013/1/3 17:08:00
如何解析JSON  发帖心情 Post By:2017/10/24 17:35:00 [只看该作者]

https://work.weixin.qq.com/api/doc#11228

嵌套的JSON,试了好久解不出来,请老师帮忙

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20171024172930.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20171024172830.png
图片点击可在新窗口打开查看

Dim st As New Date(1970,1,1,8,0,0)
Dim rq1 As Date = #10/24/2017 0:0:0#
Dim rq2 As Date = #10/24/2017 23:59:59#
Dim ksrq As Integer = CInt(( rq1- st).TotalSeconds()) '时间戳
Dim jsrq As Integer = CInt((rq2- st).TotalSeconds()) '时间戳

Dim ul As String = "https://qyapi.weixin.qq.com/cgi-bin/corp/getapprovaldata?access_token={0}"
Dim hc As New HttpClient(CExp(ul,Functions.Execute("GetQYAccessToken_sp")))
Dim jo As New JObject
Dim jo1 As New JObject
jo("starttime") = ksrq
jo("endtime") = jsrq
hc.Content = jo.ToString()
jo = JObject.Parse(hc.GetData)
If jo("errcode") = "0" Then
    For Each jt As JToken In jo("data")
        Dim r As Row = Tables("审批").AddNew
        r("count") = jo("count")
        r("total")= jo("total")
        r("next_spnum")= jo("next_spnum")
        r("spname") = jt("spname")
        r("apply_name") =jt("apply_name")
        r("apply_org") =jt("apply_org")
        r("approval_name") =jt("approval_name").ToString
        r("notify_name") =jt("notify_name").Tostring
        r("sp_status") =jt("sp_status")
        r("sp_num") =jt("sp_num")
        r("apply_time") =jt("apply_time")
        r("apply_user_id") =jt("apply_user_id")
        r("comm") =jt("comm").Tostring
        r("apply_data") =jt("comm")("apply_data").ToString
         
        For Each jt1 As JToken In jt("comm")("apply_data").Tostring
            Dim r1 As Row = Tables("审批明细").AddNew
            r1("sp_num") =jt1("sp_num")
            r1("item") =jt("sp_num")
            r1("title") =jt1("title")
            r1("type") =jt1("type")
            r1("value") =jt1("value")
        Next
    Next
    
Else
    MessageBox.Show(jo.ToString)
End If



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


加好友 发短信
等级:二尾狐 帖子:517 积分:3383 威望:0 精华:0 注册:2013/1/3 17:08:00
  发帖心情 Post By:2017/10/24 17:39:00 [只看该作者]

审批表为主表,数据能取出来并填进去了,想把apply_data里的数据放到明细表里(因为项数不一定)

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/24 18:17:00 [只看该作者]

你得到的应该是一个数组吧?参考

 

Dim json As String = "{'name':'李云龙','card':[{'bank1111':'工行','account111':'123'},{'bank2222':'建行','account222':'678'}]}"
Dim jo As JObject = JObject.Parse(json)
Output.Show(jo("name"))
For Each jt As JToken In jo("card")
    For Each a As object In jt
        output.show(a.name & " " & a.value)
    Next
Next


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


加好友 发短信
等级:二尾狐 帖子:517 积分:3383 威望:0 精华:0 注册:2013/1/3 17:08:00
  发帖心情 Post By:2017/10/25 8:19:00 [只看该作者]

  1. 【注解2apply_data
  2. {
  3. "item-1490450365815": {
  4. "title": "加班理由", // 类目名
  5. "type": "textarea", // 类目类型【 text: "文本", textarea: "多行文本", number: "数字", date: "日期", datehour: "日期+时间", select: "选择框" 】
  6. "value": "项目需要" // 填写的内容,只有Type是图片时,value是一个数组,数据示例如下方所示;
  7. },
  8. "item-1490450379069": {
  9. "title": "加班开始时间",
  10. "type": "date",
  11. "value": "1490371200000" //日期格式为时间缀
  12. },
  13. }

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


加好友 发短信
等级:二尾狐 帖子:517 积分:3383 威望:0 精华:0 注册:2013/1/3 17:08:00
  发帖心情 Post By:2017/10/25 8:22:00 [只看该作者]

得到是4楼的string,想得到下面格式的数据
item                         title                   type                         value
item-1490450365815
[此贴子已经被作者于2017/10/25 8:25:30编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/25 8:53:00 [只看该作者]

参考代码

 

Dim str As String = ClipBoard.GetText
Dim jo = jobject.Parse(str)
For Each item As object In jo
    output.show(item.name)
    For Each  iitem As object In jo(item.name)
        output.show(iitem.name & " " & iitem.value)
    Next
Next

[此贴子已经被作者于2017/10/25 8:53:39编辑过]

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


加好友 发短信
等级:二尾狐 帖子:517 积分:3383 威望:0 精华:0 注册:2013/1/3 17:08:00
  发帖心情 Post By:2017/10/25 9:38:00 [只看该作者]

感谢 ,前面的OK了。

还有一个问题
"item-1490450379069": {
        "title": "加班开始时间",
        "type": "date",
        "value": "1490371200000"    //日期格式为时间缀
    },
    "item-1490450399494": {
        "title": "加班证明",
        "type": "image",
        "value": [
                    "https://p.qpic.cn/pic_wework/4116602740/a2a481aa4e87639055774e51bc6cabde5595cd4458b57343/0",
                    "https://p.qpic.cn/pic_wework/4116602740/a2a481aa4e87639055774e51bc6cabde5595cd4458b57343/0"
                ]
    }

type  是"image",”file“类型时,"value"的值是一个数组,存到表里会出错,怎么样能不出错

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/25 9:47:00 [只看该作者]

Dim str As String = ClipBoard.GetText
Dim jo = jobject.Parse(str)
For Each item As object In jo
    output.show(item.name)
    For Each  iitem As object In jo(item.name)
        If typeof iitem.value Is jarray
            For Each iiitem As object In iitem.value
                output.show(iiitem.value)
            Next
        Else
            output.show(iitem.name & " " & iitem.value)
        End If
    Next
Next

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


加好友 发短信
等级:二尾狐 帖子:517 积分:3383 威望:0 精华:0 注册:2013/1/3 17:08:00
  发帖心情 Post By:2017/10/25 9:48:00 [只看该作者]

谢谢

 回到顶部