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不是对象,则直接替换值}}
}
相关文章:
c#动态更新替换json节点
需求项目json作为主模板,会应用到多个子模版,当后续项目变更只需要修改主模板中节点,并且能够动态更新到原来的子模版中去。 主模板示例: {"A": {"A1": "","A2": false,"A3"…...

cf补题日记
听退役选手建议,补40道C、D题。 (又又又开新专题。。。 进度:2/40 原题1: You are given a string ss, consisting of digits from 00 to 99. In one operation, you can pick any digit in this string, except for 00 or the…...
Golang学习笔记_01——包
文章目录 包(package)1. 定义2. 导入3. 初始化4. 可见性4. 注意4.1 包声明4.2 main包4.3 包的导入4.4标识符的可见性4.5 包的初始化4.6 避免命名冲突4.7 包的路径和名称4.8 匿名导入4.9 使用Go Modules 包(package) 在Golang&…...

RPC设计--应用层缓冲区,TcpBuffer
为什么需要应用层的buffer 为了方便数据处理,从fd上直接读写然后做包的组装、拆解不够方便方便异步发送,将数据写到应用层buffer后即可返回,让epoll即event_loop去异步发送。提高发送效率,多个小包可合并发送 buffer 设计 可以…...

基于单片机智能控制的饮水机控制系统
基于单片机智能控制的饮水机控制系统,以STC89C52单片机为核心,利用防水型DS18B20温度传感器对饮水机内的水温做出检测,其次利用水位传感器对饮水机内的水量做出检测,并显示在OLED液晶显示屏上。用户在使用饮水机时,通过…...

路径规划 | 改进的人工势场法APF算法进行路径规划(Matlab)
目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 改进的人工势场法(APF)路径规划算法 在路径规划中,人工势场法(APF)是一种常见的方法,但传统的APF算法容易陷入局部极小值,导致路径规…...
【云原生知识】Kubernets实践-前端服务如何访问后端服务
文章目录 概述步骤1:部署后端服务步骤2:配置Nginx步骤3:创建Nginx服务总结 如何确保 Nginx 能持续访问后端服务?相关文献 概述 假设你正在使用Kubernetes作为容器云平台,以下是如何配置Nginx以及相关服务,…...

【ubuntu18.04】ubuntu18.04安装EasyCwmp操作说明
参考链接 Tutorial – EasyCwmphttps://easycwmp.org/tutorial/ EasyCwmp 介绍 EasyCwmp 设计包括 2 个部分: EasyCwmp 核心:它包括 TR069 CWMP 引擎,负责与 ACS 服务器的通信。它是用 C 语言开发的。EasyCwmp DataModel:它包…...
使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象
本教程展示如何使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象。 下面是具体的步骤和代码示例,包括添加依赖项以及编写用于反序列化JSON字符串为Map的代码。 添加依赖项 首先,在你的项目中添加Jackson库的依赖。如果你使用的是Maven构…...
ASP.NET Core实现鉴权授权的几个库
System.IdentityModel.Tokens.Jwt 和 Microsoft.AspNetCore.Authentication.JwtBearer 是两个常用的库,分别用于处理 JWT(JSON Web Token)相关的任务。它们在功能上有一定重叠,但侧重点和使用场景有所不同。 1. System.IdentityM…...

MySql:数据类型
✨✨作者主页:嶔某✨✨ ✨✨所属专栏:MySql✨✨ 数据类型分类 分类数据类型说明数值类型BIT(M)位类型,M指定位数,默认值1,范围1~64TINYINT [UNSIGNED]占用一个字节,带符号的范围 -128~127,无符…...
Couchbase的OLAP支持情况
Couchbase 是一个高性能的 NoSQL 数据库,主要用于在线事务处理(OLTP)场景,但它也提供了一些功能来支持在线分析处理(OLAP)需求。以下是 Couchbase 对 OLAP 支持的几个方面: 1. N1QL 查询语言 …...
企业级包管理器之搭建 npm 私有服务器 (6)
在企业级应用开发中,常常需要处理私有包的发布和管理。搭建 npm 私有服务器是一个理想的解决方案,它不仅能保证代码的私密性,还能提供更快的下载速度和更精细的权限设置。 一、搭建 npm 私有服务器的优势 保证代码私密性:在企业…...
Elasticsearch的一些介绍
你想问的可能是 **Elasticsearch**,以下是关于它的一些介绍: ### 概述 Elasticsearch是一个基于Apache Lucene库构建的开源分布式搜索和分析引擎,采用Java语言编写,具有高性能、可扩展性和易用性等特点,可用于各种数据…...

音乐网站设计与实现
文末获取源码和万字论文,制作不易,感谢点赞支持。 音乐网站设计与实现 摘 要 本音乐网站是针对目前音乐网站管理的实际需求,从实际工作出发,对过去的音乐网站管理系统存在的问题进行分析,结合计算机系统的结构、概念、…...

UE5 蓝图节点中文化
文章目录 一、问题背景二、解决方法 一、问题背景 在虚幻引擎5.4、5.5版本中,即使将编辑器语言设置为中文,还是会出现大部分蓝图节点没有中文化。 蓝图节点没有中文化图示: 二、解决方法 在左上角找到 编辑,打开 编辑器偏好设置…...

java抽奖系统登录下(四)
6.4 关于登录 最简单的登录: 1、web登录页填写登录信息,前端发送登录信息到后端; 2、后端接受登录信息,并校验。校验成功,返回成功结果。 这种登录会出现一个问题,用户1成功登录之后,获取到后台…...

解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息
事情发生在两天前,位于公网的阿里云轻量级服务器(Ubuntu 24.04.1 LTS)忽然没网。主要是上次上服务器进行配置已经是一个多月前,最近也没有做什么事情,就忽然没网了,让人纳闷。更主要的是,上次备…...

跨域问题及其解决方案
跨域问题及其解决方案 在Web开发中,跨域问题是一个常见的安全限制,它涉及到浏览器的同源策略(Same-Origin Policy)。本文将详细解释跨域问题的原因、影响以及几种常见的解决方案,并提供在Java中的实现方法。 目录 跨…...

在CentOS中安装和卸载mysql
在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集
基于深度学习YOLOv11的盲人障碍物目标检测:开启盲人出行新纪元 在全球范围内,盲人及视觉障碍者的出行问题一直是社会关注的重点。尽管技术不断进步,许多城市的无障碍设施依然未能满足盲人出行的实际需求。尤其是在复杂的城市环境中ÿ…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...

【HTML】HTML 与 CSS 基础教程
作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…...
Kafka深度解析与原理剖析
文章目录 一、Kafka核心架构原理1. **分布式协调与选举**2. **ISR、OSR与HW机制**3. **高性能存储设计**4. **刷盘机制 (Flush)**5. **消息压缩算法**二、高可用与消息可靠性保障1. **数据高可用策略**2. **消息丢失场景与规避**3. **顺序消费保证**三、Kafka高频面试题精析1. …...