如何在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
相关产品推荐
相关产品推荐

