C#和VB:Json串转换为DataTable

本文介绍了一种将JSON数据转换为DataTable的方法。首先通过反序列化将JSON字符串转化为JArray对象,接着构建表头并添加到DataTable中,最后遍历JSON对象的数据部分并将数据逐条添加到DataTable中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//JsonStr为Json字符串
       JArray array = JsonConvert.DeserializeObject(JsonStr) as JArray;//反序列化为数组
       if (array.Count > 0)
            {
                StringBuilder columns = new StringBuilder();
                DataTable table = new DataTable();
                JObject objColumns = array[0] as JObject;
                //构造表头
                foreach (JToken jkon in objColumns.AsEnumerable<JToken>())
                {
                    string name = ((JProperty)(jkon)).Name;
                    columns.Append(name + ",");
                    table.Columns.Add(name);
                }
                //向表中添加数据
                for (int i = 0; i < array.Count; i++)
                {
                    DataRow row = table.NewRow();
                    JObject obj = array[i] as JObject;
                    foreach (JToken jkon in obj.AsEnumerable<JToken>())
                    {

                        string name = ((JProperty)(jkon)).Name;
                        string value = ((JProperty)(jkon)).Value.ToString();
                        row[name] = value;
                    }
                    table.Rows.Add(row);
                }
          }

        Private Sub ConvertDataTable(ByVal jsonStr As String)
            Dim array As JArray = TryCast(JsonConvert.DeserializeObject(jsonStr), JArray)
            If array.Count > 0 Then
                Dim columns As StringBuilder = New StringBuilder()
                Dim table As DataTable = New DataTable()
                Dim objColumns As JObject = TryCast(array(0), JObject)

                For Each jkon As JToken In objColumns.AsJEnumerable
                    Dim name As String = (CType((jkon), JProperty)).Name
                    columns.Append(name & ",")
                    table.Columns.Add(name)
                Next

                For i As Integer = 0 To array.Count - 1
                    Dim row As DataRow = table.NewRow()
                    Dim obj As JObject = TryCast(array(i), JObject)

                    For Each jkon As JToken In obj.AsJEnumerable
                        Dim name As String = (CType((jkon), JProperty)).Name
                        Dim value As String = (CType((jkon), JProperty)).Value.ToString()
                        row(name) = value
                    Next
                    table.Rows.Add(row)
                Next
            End If
        End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值