如何从DataGridView生成prompt_map格式的JSON属性?
解决方案
核心修改思路
不需要自定义Frames类,改用Dictionary(Of String, String)存储动态键值对,完全匹配你需要的JSON格式(可随行数动态扩展的键值集合)。
修改后的完整代码
1. 调整数据结构类
Imports Newtonsoft.Json Public Class JsonStructure ' 用Dictionary替代自定义Frames类,实现动态键值对存储 Public prompt_map As Dictionary(Of String, String) = New Dictionary(Of String, String)() End Class
2. 按钮点击事件(整合数据提取与序列化)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim myJson As New JsonStructure() ' 遍历DataGridView的有效行,填充字典 For Each row As DataGridViewRow In DataGridView1.Rows ' 跳过默认的空白新增行 If row.IsNewRow Then Continue For ' 获取两列值,先判断是否为空 Dim keyObj = row.Cells("Column1").Value Dim valueObj = row.Cells("Column2").Value If keyObj IsNot Nothing AndAlso valueObj IsNot Nothing Then Dim key = keyObj.ToString().Trim() Dim value = valueObj.ToString().Trim() ' 跳过空字符串的无效行 If Not String.IsNullOrEmpty(key) AndAlso Not String.IsNullOrEmpty(value) Then ' 避免重复键,可根据需求选择覆盖或跳过 If Not myJson.prompt_map.ContainsKey(key) Then myJson.prompt_map.Add(key, value) End If End If End If Next ' 序列化为格式化后的JSON Dim myString As String = JsonConvert.SerializeObject(myJson, Formatting.Indented) MsgBox(myString) End Sub
代码说明
- Dictionary的优势:相比固定类,它能动态添加任意数量的键值对,完美适配用户新增行的需求,序列化后直接生成你要的
"键": "值"格式。 - 行有效性判断:跳过
IsNewRow(DataGridView默认最后一行是空白新增行),同时判断单元格值是否为空,避免空引用错误。 - 重复键处理:添加
ContainsKey判断,避免重复键导致的异常,你可以根据需求改成覆盖旧值或提示用户。 - 序列化效果:直接序列化
JsonStructure对象,会自动生成嵌套的JSON结构。
测试效果
当Column1输入10、20、30,Column2输入"A"、"B"、"C"时,生成的JSON为:
{ "prompt_map": { "10": "A", "20": "B", "30": "C" } }
内容的提问来源于stack exchange,提问作者tnils25
相关产品推荐
相关产品推荐

