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

VB使用Newtonsoft Json.NET循环生成JSON时JObject插入JArray失败问题

问题解决方法

核心错误原因

你要生成的目标JSON根结构是**对象(JObject)**而非数组(JArray),你当前用JArray作为根容器,自然无法得到你要的键值对结构。你现在的写法会把每行变成一个单独的小对象塞到数组里,输出的结构是[{"-001-":{...}},{"-002-":{...}}],和需求完全不符。

修正后可运行代码

' 根容器用JObject而非JArray
Dim rootObj As New JObject()

For Each row In dtgAssociazione.Rows
    ' 跳过空行的健壮性处理,可根据业务需求调整
    If row Is Nothing OrElse row.Cells(0).Value Is Nothing Then Continue For
    
    ' 构造每行对应的子属性对象
    Dim childObj = New JObject(
        New JProperty("value", If(row.Cells(1).Value, "")),
        New JProperty("substring", If(row.Cells(2).Value, ""))
    )
    
    ' 直接把行的Cells(0)值作为键,添加到根对象中
    rootObj.Add(row.Cells(0).Value.ToString(), childObj)
Next

' 转成标准JSON字符串即可存入数据库
Dim resultJsonStr As String = rootObj.ToString()
最佳实践建议
  • 容器选择匹配结构:键值对结构用JObject作为容器,有序列表结构才用JArray,不要混淆两种容器的使用场景。
  • 异常前置处理:提前判断单元格值是否为空,避免生成JSON时出现空引用异常,也可根据业务规则添加值合法性校验。
  • 键唯一性校验:要确保row.Cells(0)的值不会重复,往JObject中添加重复键会直接抛出异常,存在重复值场景时可提前做去重或者冲突处理逻辑。
  • 复杂场景简化:如果后续JSON结构复杂度上升,可先定义对应的VB实体类,把行数据转成类实例后直接用JsonConvert.SerializeObject序列化生成JSON,代码可读性和可维护性会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:00