使用 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的一些基础用法,由于篇幅的关系,所以只能分成两篇,望见谅!昨天就 ...
随机推荐
- ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...
- JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)
1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 ale ...
- Log4Net生成出现未引用错误解决方法
1.步骤一: 2.步骤二: 明明添加了引用怎么还提示找不到命名空间呢.解决这个问题很简单,右键项目选择属性: 3.步骤三:换成.NET Framework 4即可,解决! 4.两个有啥区别? Micr ...
- 谁是2016年的.NET开发者?
Nora Georgieva (http://www.telerik.com/blogs/infographic-the-dotnet-developer-of-2016) Whether you h ...
- MVC默认路由实现分页-PagerExtend.dll
这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的. A.效果(这里用了bootstra ...
- Oracle_数据处理
数据操纵语言 DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行: - 向表中插入数据 - 修改现存数据 - 删除现存数据* 事务是由完成若干项工作 ...
- mysql交互式连接&非交互式连接
交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tom ...
- 5.C#WinForm基础登陆失败三次退出系统
目标: 登陆界面,登陆错误三次退出程序.假设用户名密码是admin.888888,不区分大小写,(易错点:局部变量与类变量) 局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化. ...
- IIS 如何设置多个Access-Control-Allow-Origin
1,跨域请求ajax,可以增加请求Header,动态添加 System.Collections.Generic.List<string> lHost = new System.Collec ...
- hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN&q ...