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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:07:37