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文本进行 增删改查的更多相关文章

  1. MongoDB(二)-- Java API 实现增删改查

    一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...

  2. mongodb增删改查操作

    Note:mongodb存储的是文档,且文档是json格式的对象,所以增删改查都必须是json格式对象. 注:mongodb常用库和表操作,但mongodb在插入数据时,不需要先创建表. show d ...

  3. javascript json对象操作(基本增删改查)

    /** * Json对象操作,增删改查 * * @author lellansin * @blog www.lellansin.com * @version 0.1 * * 解决一些常见的问题 * g ...

  4. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON字符串增加额外字段 假如我们有这样结 ...

  5. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  6. JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)

    前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...

  7. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)

    前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...

  8. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面

    前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...

  9. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(二)

    前言:上篇 JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) 介绍了下knockout.js的一些基础用法,由于篇幅的关系,所以只能分成两篇,望见谅!昨天就 ...

随机推荐

  1. C#的泛型的类型参数可以有带参数的构造函数的约束方式吗?

    Review后看到标题让我十分羞愧自己语文功底太差,估计...请见谅......我还特地把这句写回开头了...... 问题 前天遇到的一个问题,所以在MSDN发了个问,刚也丰富了下问题,关于泛型的. ...

  2. 【翻译】MongoDB指南/引言

    [原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...

  3. 编写Windows服务疑问2:探索服务与安装器的关系

    首先,来弄两个服务,一个叫“飞机”,一个叫“火车”. public class FeiJiService : ServiceBase { public FeiJiService() { Service ...

  4. 计算机程序的思维逻辑 (8) - char的真正含义

    看似简单的char 通过前两节,我们应该对字符和文本的编码和乱码有了一个清晰的认识,但前两节都是与编程语言无关的,我们还是不知道怎么在程序中处理字符和文本. 本节讨论在Java中进行字符处理的基础 - ...

  5. 【MVVM Light】Messager的使用

    一.前言       在MVVM编程的模式中,有时候我们会遇到一个很尴尬的情况: 若干个xaml.cs都复用一个ViewModel,当ViewModel想传递一个特定的消息给某一个xaml.cs的时候 ...

  6. js正则表达式整理

    一.数字类 数字:^[0-9]*$ 正数.负数.和小数:^(\-|\+)?\d+(\.\d+)?$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9 ...

  7. C# Linq排序

    今天在家看了一下linq,实践了一下书中代码,发现排序和查重的先后顺序太重要了. using System; using System.Collections.Generic; using Syste ...

  8. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  9. Eclipse搭建Maven Prooject(终于)

    今天我们一起来探讨eclipse搭建maven项目的步骤 一.建一个maven项目, 1.找到File ,点击 2.弹出窗口,再点击new 3.弹出窗口,点击other 4.输入maven,找到mav ...

  10. 批量处理sql 数据存入xml类型列

    个人记录 需求:当表T1 ItemCode和表T2 ItemName的数据相等时,将表T2所对应的ID和ItemName列的数据分别存入表T1 CAOZUO字段的id元素和text元素的文本中. 下面 ...