当前位置: 首页 > news >正文

c#动态更新替换json节点

需求项目json作为主模板,会应用到多个子模版,当后续项目变更只需要修改主模板中节点,并且能够动态更新到原来的子模版中去。

主模板示例:

{"A": {"A1": "","A2": false,"A3": 1},"B": {"B1": "","B2": false,"B3": 1},"C": {"C1": "","C2": false,"C3": 1}
}

模板修改后:

{"A": {"A1": "","A2": true,"A3": 2,"A4": "NewValue"},"B": {"B1": "UpdatedValue","B2": false,"B3": 1},"C": {"C1": "","C2": false,"C3": 1},"D": {"D1": "","D2": true,"D3": 3}
}

 UpdateJObject 方法实现可以动态更新json,主模板节点存在则新增,不存在可以变更也可以选择更新数据值。

program:

static void Main(string[] args)
{string oldJson = "{\"A\":{\"A1\":\"\",\"A2\":false,\"A3\":1},\"B\":{\"B1\":\"\",\"B2\":false,\"B3\":1},\"C\":{\"C1\":\"\",\"C2\":false,\"C3\":1}}";string newJson = "{\"A\":{\"A1\":\"\",\"A2\":true,\"A3\":2,\"A4\":\"NewValue\"},\"B\":{\"B1\":\"UpdatedValue\",\"B2\":false,\"B3\":1},\"C\":{\"C1\":\"\",\"C2\":false,\"C3\":1},\"D\":{\"D1\":\"\",\"D2\":true,\"D3\":3}}";JObject oldObject = JObject.Parse(oldJson);JObject newObject = JObject.Parse(newJson);Console.WriteLine("更新前:" + oldObject.ToString(Newtonsoft.Json.Formatting.Indented));// 更新旧JSON对象UpdateJObject(oldObject, newObject);Console.WriteLine("存在则更新,不存在新增,更新后:" + oldObject.ToString(Newtonsoft.Json.Formatting.Indented));oldObject = JObject.Parse(oldJson);newObject = JObject.Parse(newJson);// 更新旧JSON对象UpdateJObject(oldObject, newObject, false);Console.WriteLine("存在则跳过,不存在新增,更新后:" + oldObject.ToString(Newtonsoft.Json.Formatting.Indented));}/// <summary>
/// 更新替换json节点
/// </summary>
/// <param name="target">被更新json</param>
/// <param name="source">源json</param>
/// <param name="isUpdateOriginalData">是否更新目标已存在的节点数据</param>
static void UpdateJObject(JObject target, JObject source, bool isUpdateOriginalData = true)
{foreach (var child in source){JToken targetChild = target[child.Key];if (targetChild == null){// 正确添加child到targettarget.Add(new JProperty(child.Key, child.Value));}else if (child.Value.Type == JTokenType.Object){// 如果child是对象,则递归更新if (targetChild.Type == JTokenType.Object){UpdateJObject(targetChild as JObject, child.Value as JObject, isUpdateOriginalData);}else{if (isUpdateOriginalData)target[child.Key] = child.Value;// 如果targetChild不是对象,则替换整个值}}else{if (isUpdateOriginalData)target[child.Key] = child.Value;// 如果child不是对象,则直接替换值}}
}

http://www.lryc.cn/news/502464.html

相关文章:

  • cf补题日记
  • Golang学习笔记_01——包
  • RPC设计--应用层缓冲区,TcpBuffer
  • 基于单片机智能控制的饮水机控制系统
  • 路径规划 | 改进的人工势场法APF算法进行路径规划(Matlab)
  • 【云原生知识】Kubernets实践-前端服务如何访问后端服务
  • 【ubuntu18.04】ubuntu18.04安装EasyCwmp操作说明
  • 使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象
  • ASP.NET Core实现鉴权授权的几个库
  • MySql:数据类型
  • Couchbase的OLAP支持情况
  • 企业级包管理器之搭建 npm 私有服务器 (6)
  • Elasticsearch的一些介绍
  • 音乐网站设计与实现
  • UE5 蓝图节点中文化
  • java抽奖系统登录下(四)
  • 解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息
  • 跨域问题及其解决方案
  • 在CentOS中安装和卸载mysql
  • React简单入门 - [Next.js项目] - 页面跳转、AntD组件、二级目录等
  • Redis安装和Python练习(Windows11 + Python3.X + Pycharm社区版)
  • Sqoop脚本编写(Mysql---->>hdfs)
  • 帝可得项目redis连接不上
  • JS中this的值详细讲解以及面试指向练习
  • 显示浮动式窗口的方法
  • FireFox火狐浏览器企业策略禁止更新
  • C++类的运算符重载
  • 泷羽Sec学习笔记-zmap搭建炮台
  • 分析M0G突破后急剧下跌内因,x.game阐述不利面延续多久
  • 网络爬虫全解析