You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB6中从JSON获取数据并在MSHFlexGrid中显示

解决VBA-JSON读取JSON并在MSHFlexGrid生成带列标题的完整数据

问题场景

使用VBA-JSON v2.3.1解析JSON数据,现有代码仅能填充MSHFlexGrid的第一行数据且无列标题,需要实现读取完整JSON数组并生成带列标题的完整行列数据。

JSON示例:

{"status": "OK", "code": "OK", "message": "Ok", "data": {"messages": [{"number": "+9710001529", "message": "Hello World", "sender": "+97911308600", "time": "2022-07-12T20:12:14Z", "type": "normal"}, {"number": "+9710001529", "message": "Just For Test", "sender": "+979051931024", "time": "2022-06-28T23:15:22Z", "type": "normal"}, {"number": "+9710001529", "message": "Test", "sender": "+979565547989", "time": "2022-01-28T16:04:50Z", "type": "mobilepanel"}, {"number": "+9710001529", "message": "Comment", "sender": "+979102900089", "time": "2018-06-16T22:23:23Z", "type": "normal"}]}, "meta": {"total": 37, "pages": 4, "limit": 10, "page": 0, "prev": null, "next": "http://0.0.0.0:80/v1/inbox?limit=10\u0026page=1"}}

当前代码:

Set Json = JsonConverter.ParseJson(strResp)
MSHFlexGrid1.AddItem Json("data")("messages")(1)("number") & vbTab & Json("data")("messages")(1)("message") & vbTab & Json("data")("messages")(1)("sender")

完整解决方案代码

Sub LoadJsonToMSHFlexGrid()
    Dim Json As Object
    Dim messages As Object
    Dim msg As Object
    Dim headerStr As String
    Dim rowStr As String
    Dim key As Variant
    
    ' 解析JSON字符串
    Set Json = JsonConverter.ParseJson(strResp)
    ' 获取messages数组对象
    Set messages = Json("data")("messages")
    
    ' 初始化MSHFlexGrid
    With MSHFlexGrid1
        .Clear ' 清空现有内容
        .Cols = 0 ' 重置列数
        .Rows = 1 ' 初始仅保留标题行位置
    End With
    
    ' 生成列标题(从第一个消息对象提取字段名)
    If messages.Count > 0 Then
        headerStr = ""
        For Each key In messages(1).Keys
            headerStr = headerStr & key & vbTab
            MSHFlexGrid1.Cols = MSHFlexGrid1.Cols + 1 ' 动态匹配列数
        Next key
        ' 移除末尾多余Tab,添加标题行
        MSHFlexGrid1.AddItem Left(headerStr, Len(headerStr) - 1)
    End If
    
    ' 遍历所有消息,填充数据行
    For Each msg In messages
        rowStr = ""
        For Each key In msg.Keys
            rowStr = rowStr & msg(key) & vbTab
        Next key
        ' 移除末尾多余Tab,添加数据行
        MSHFlexGrid1.AddItem Left(rowStr, Len(rowStr) - 1)
    Next msg
End Sub

代码说明

  • 初始化网格:清空现有内容、重置行列数,确保从干净状态开始加载数据。
  • 生成列标题:取第一个消息对象的所有字段名作为列标题,同时动态设置网格列数,适配JSON结构。
  • 填充数据行:遍历messages数组中的每个对象,将字段值用Tab分隔拼接成字符串,逐行添加到网格中。

内容的提问来源于stack exchange,提问作者Unforgiven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:27:36