以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何解析JSON  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=108532)

--  作者:nothing
--  发布时间:2017/10/24 17:35:00
--  如何解析JSON
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
--  发布时间:2017/10/24 17:39:00
--  
审批表为主表,数据能取出来并填进去了,想把apply_data里的数据放到明细表里(因为项数不一定)
--  作者:有点甜
--  发布时间: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
--  发布时间: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
--  发布时间:2017/10/25 8:22:00
--  
得到是4楼的string,想得到下面格式的数据
item                         title                   type                         value
item-1490450365815
[此贴子已经被作者于2017/10/25 8:25:30编辑过]

--  作者:有点甜
--  发布时间: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
--  发布时间: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"的值是一个数组,存到表里会出错,怎么样能不出错

--  作者:有点甜
--  发布时间: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
--  发布时间:2017/10/25 9:48:00
--  
谢谢