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

VB.Net中如何将字段位置可变的JSON转换为对应列的DataTable

VB.Net 实现动态字段JSON转DataTable并精准匹配列

问题背景

你提供的JSON数据被XML标签包裹,且字段顺序可能随时变化,需要将其转换为DataTable,确保每个字段值对应到正确的列。

解决方案步骤

我们使用**Newtonsoft.Json(Json.NET)**处理JSON解析,它能灵活应对动态字段结构,步骤如下:


1. 提取纯JSON内容

原数据是XML节点的文本内容,首先剥离外层<string>标签,取出内部的JSON数组:

' 原始输入字符串
Dim rawXmlString As String = "<string xmlns=""http://tecogis.com/"">[{ ""REPORT NUMBER"":""LG534248650"", ... }]</string>"

' 方法1:用XML解析提取JSON(更可靠)
Dim xDoc As XDocument = XDocument.Parse(rawXmlString)
Dim jsonString As String = xDoc.Root.Value.Trim()

' 方法2:简单字符串处理(仅当XML结构固定时使用)
' jsonString = rawXmlString.Substring(rawXmlString.IndexOf("["), rawXmlString.LastIndexOf("]") - rawXmlString.IndexOf("[") + 1)

2. 引用Json.NET库

在项目中通过NuGet安装Newtonsoft.Json包,或手动添加程序集引用。

3. 解析JSON并生成DataTable

以下代码会自动根据JSON字段创建DataTable列,并按字段名匹配填充数据,完全不受字段顺序影响:

Imports Newtonsoft.Json.Linq
Imports System.Data

Public Function JsonToDataTable(jsonString As String) As DataTable
    Dim dt As New DataTable()
    Dim jsonArray As JArray = JArray.Parse(jsonString)
    
    ' 空JSON数组直接返回空表
    If jsonArray.Count = 0 Then Return dt
    
    ' 从第一个JSON对象提取字段,创建DataTable列
    Dim firstObj As JObject = jsonArray(0)
    For Each prop As JProperty In firstObj.Properties()
        dt.Columns.Add(prop.Name, GetType(String)) ' 默认用String类型,可按需调整为对应类型
    Next
    
    ' 遍历所有JSON对象,填充DataTable行
    For Each obj As JObject In jsonArray
        Dim row As DataRow = dt.NewRow()
        For Each prop As JProperty In obj.Properties()
            ' 按字段名精准匹配列
            If dt.Columns.Contains(prop.Name) Then
                ' 处理特殊内容:转义的HTML标签和换行符
                Dim value As String = prop.Value.ToString().Replace("&#003cbr&#003e", Environment.NewLine)
                row(prop.Name) = value
            End If
        Next
        dt.Rows.Add(row)
    Next
    
    Return dt
End Function

4. 调用示例

' 生成DataTable
Dim resultDt As DataTable = JsonToDataTable(jsonString)

' 验证输出(可选)
For Each row As DataRow In resultDt.Rows
    Console.WriteLine($"报告编号:{row("REPORT NUMBER")},克拉重量:{row("CARAT WEIGHT")}")
Next

关键说明

  • 动态列创建:自动遍历JSON字段生成DataTable列,无需提前定义固定列结构。
  • 字段精准匹配:填充行时通过字段名查找对应列,完全不受JSON字段顺序变化影响。
  • 特殊内容处理:代码中处理了HTML转义的<br>标签,可根据需求扩展其他特殊字符转换逻辑。
  • 多对象支持:兼容JSON数组包含多个对象的场景,自动添加多行数据。

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

相关产品推荐
方舟 Agent Plan

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

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