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

使用Newtonsoft在JObject中正确添加属性的实现方法

解决JObject层级转换问题

这问题我之前处理过,核心思路就是把.分隔的节点路径拆分成层级结构,再把响应值挂载到最底层的节点上。用Newtonsoft.Json的JObject就能轻松实现,给你看完整的代码示例:

using Newtonsoft.Json.Linq;

// 解析原始的JObject
var originalJObj = JObject.Parse(@"{""Node"": ""Fruit.Color"", ""Response"": ""Green""}");

// 提取路径字符串和目标值
var nodePath = originalJObj["Node"].Value<string>();
var responseValue = originalJObj["Response"];

// 把路径按`.`拆分成节点数组
var nodeSegments = nodePath.Split('.');

// 初始化目标JObject
var targetJObj = new JObject();
JObject currentLayer = targetJObj;

// 遍历节点数组,逐层构建嵌套结构
for (int i = 0; i < nodeSegments.Length; i++)
{
    var segment = nodeSegments[i];
    if (i == nodeSegments.Length - 1)
    {
        // 最后一个节点,直接赋值
        currentLayer[segment] = responseValue;
    }
    else
    {
        // 创建子层级JObject,切换到下一层继续处理
        var childJObj = new JObject();
        currentLayer[segment] = childJObj;
        currentLayer = childJObj;
    }
}

// 输出结果,就是你要的结构
Console.WriteLine(targetJObj.ToString());

代码逻辑说明

  1. 先从原始JObject里取出Node的路径字符串和Response的值;
  2. 用Split('.')把路径拆成单个节点名称的数组,比如"Fruit.Color"会变成["Fruit", "Color"];
  3. 从根JObject开始,逐个创建子JObject层级,直到最后一个节点,把响应值赋值给它;
  4. 这个方法还支持更长的路径,比如"Fruit.Type.Name",能自动生成三层嵌套的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:41