使用 Json.Net 对Json文本进行 增删改查
JSON 已经成为当前主流交互格式, 如何在C#中使用 Json.Net 对Json文本进行 增删改查呢?见如下代码
#region Create (从零创建)
public static string CreateFromZero()
{
StringBuilder jsonText = new StringBuilder();
StringWriter sw = new StringWriter(jsonText); using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.None;
writer.WriteStartObject();//{
#region children
writer.WritePropertyName("children");
writer.WriteStartArray();//[ writer.WriteStartObject();//{
writer.WritePropertyName("children");
writer.WriteStartArray();//[ writer.WriteStartObject();//{
writer.WritePropertyName("organizationCode");
writer.WriteValue("grandson");
writer.WritePropertyName("organizationName");
writer.WriteValue("孙子节点");
writer.WriteEndObject();//} writer.WriteEndArray();//] writer.WritePropertyName("organizationCode");
writer.WriteValue("son");
writer.WritePropertyName("organizationName");
writer.WriteValue("子节点");
writer.WriteEndObject();//} writer.WriteEndArray();//]
#endregion
writer.WritePropertyName("organizationCode");
writer.WriteValue("root");
writer.WritePropertyName("organizationName");
writer.WriteValue("根节点"); writer.WriteEndObject();//} }
return jsonText.ToString();
} #endregion #region Delete ,Update (删除指定节点 + 在指定节点前后添加 + 修改节点)
public static string OperateNode()
{
string jsonText = CreateFromZero();
JToken jobject = JObject.Parse(jsonText);
#region 新节点
StringBuilder jsonTextNew = new StringBuilder();
StringWriter sw = new StringWriter(jsonTextNew); using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.None;
writer.WriteStartObject();//{
writer.WritePropertyName("organizationCode");
writer.WriteValue("newson");
writer.WritePropertyName("organizationName");
writer.WriteValue("新节点");
writer.WriteEndObject();//}
}
#endregion JToken jobjectNew = JObject.Parse(jsonTextNew.ToString()); string[] field = new string[] { "孙子节点" };
List<JToken> removeNodes = new List<JToken>();
GetRemoveNodes(jobject, field, ref removeNodes);
foreach (JToken node in removeNodes)
{
JToken nodeObj = node.Parent;
//nodeObj.Remove(); //删除此节点 //nodeObj.AddAfterSelf(jobjectNew); //在此节点后添加 json 对象
//nodeObj.AddBeforeSelf(jobjectNew);//在此节点前添加 json 对象
nodeObj.Replace(jobjectNew); //修改此节点, 通过替换实现 } return jobject.ToString();
}
private static void GetRemoveNodes(JToken token, string[] fields, ref List<JToken> removeNodes)
{
JContainer container = token as JContainer;
if (container == null) return; foreach (JToken el in container.Children())
{
JProperty p = el as JProperty;
if (p != null && fields.Contains(p.Value.ToString()))
{
removeNodes.Add(el);
}
GetRemoveNodes(el, fields, ref removeNodes);
} }
#endregion #region Retrieve (查询)
//官网例子比较好:
//http://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm
#endregion
使用 Json.Net 对Json文本进行 增删改查的更多相关文章
- MongoDB(二)-- Java API 实现增删改查
一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...
- mongodb增删改查操作
Note:mongodb存储的是文档,且文档是json格式的对象,所以增删改查都必须是json格式对象. 注:mongodb常用库和表操作,但mongodb在插入数据时,不需要先创建表. show d ...
- javascript json对象操作(基本增删改查)
/** * Json对象操作,增删改查 * * @author lellansin * @blog www.lellansin.com * @version 0.1 * * 解决一些常见的问题 * g ...
- Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON字符串增加额外字段 假如我们有这样结 ...
- JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件
JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(二)
前言:上篇 JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) 介绍了下knockout.js的一些基础用法,由于篇幅的关系,所以只能分成两篇,望见谅!昨天就 ...
随机推荐
- BCL中String.Join的实现
在开发中,有时候会遇到需要把一个List对象中的某个字段用一个分隔符拼成一个字符串的情况.比如在SQL语句的in条件中,我们通常需要把List<int>这样的对象转换为“1,2,3”这样的 ...
- [模拟电路] 2、Passive Band Pass Filter
note: Some articles are very good in http://www.electronics-tutorials.ws/,I share them in the Cnblog ...
- [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...
- ASP.NET MVC Model绑定(三)
ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...
- 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型
1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...
- ★Kali信息收集~★6.Dmitry:汇总收集
概述: DMitry(Deepmagic Information Gathering Tool)是一个一体化的信息收集工具.它可以用来收集以下信息: 1. 端口扫描 2. whois主机IP和域名信息 ...
- ElasticSearch 5学习(2)——Kibana+X-Pack介绍使用(全)
Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作.Kibana目前最新的版本5.0.2,回顾一下Kibana 3和 ...
- SQL Server-外部联接基础回顾(十三)
前言 本节我们继续讲讲联接类型中的外部联接,本节之后我们将讲述有关联接性能以及更深入的知识,简短内容,深入的理解,Always to review the basics. 外部联接 外部联接又分为左外 ...
- C# Excel数据有效性
C# Excel数据有效性 在Excel中,我们可以使用数据有效性功能来定义哪些数据可以被输入到工作表的单元格中,例如,限制输入的数据为一定范围内的数字或使用下拉列表来限制用户可选择的数据等.这篇文章 ...
- spring整合mybatis使用<context:property-placeholder>时的坑
背景 最近项目要上线,需要开发一个数据迁移程序.程序的主要功能就是将一个数据库里的数据,查询出来经过一系列处理后导入另一个数据库.考虑到开发的方便快捷.自然想到用spring和mybatis整合一下. ...