使用Json.net对Json进行遍历
公司使用了一种伪Json, 当value为字符串并且以"@"开头时, 要替换成真实的值, 比如{"name":"@countryName"}, 那么就要把@countryName替换掉, 这就涉及到使用Json.net进行遍历
以前都是直接写相应的class然后直接Newtonsoft.Json.JsonConvert.DeserializeObject<T>()就可以了, 遍历的方法还是很不好找, 所以给共享出来
private static void RecursivelyReplaceVariable(JToken jToken, Dictionary<string, string> variables)
{
if (jToken is JValue)
{
return;
}
var childToken = jToken.First;
while (childToken != null)
{
if (childToken.Type == JTokenType.Property)
{
var p = (JProperty)childToken;
var valueType = p.Value.Type; if (valueType == JTokenType.String)
{ var value = p.Value.ToString();
if (value.StartsWith("@"))
{
if (!variables.TryGetValue(value, out value))
{
throw new Exception($"Variable {value} not defined");
}
p.Value = value;
}
}
else if (valueType == JTokenType.Object)
{
RecursivelyReplaceVariable(p.Value, variables);
}
else if (valueType == JTokenType.Array)
{
foreach (var item in (JArray)p.Value)
{
RecursivelyReplaceVariable(item, variables);
}
}
}
childToken = childToken.Next;
}
}
另外一种方法
var properties = jObject.Properties();
foreach (var property in properties)
{
var valueType = property.Value.Type;
if (valueType== JTokenType.Object)
{
ReplaceValue((JObject)property.Value );
}
else if (valueType== JTokenType.String)
{
property.Value = "...";
}
else if (valueType== JTokenType.Array)
{
var k=property.Value.First();
foreach (var item in (JArray)property.Value)
{
ReplaceValue((JObject)item);
}
}
}
Json.net中一些基础类的继承关系
JObject、JProperty、JArray、JConstructor继承自JContainer(abstract)
JValue、JContainer继承自JToken(abstract)
使用Json.net对Json进行遍历的更多相关文章
- Javascript中JSON对象的操作以及遍历key/value
//遍历获取值: function text(){ var json = {"options":"[{/"text/":/"王家湾/&quo ...
- 对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值
对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值?请参阅下面的关键代码: <html> <head> & ...
- JSON对象与JSON数组的长度和遍历方法
JSON对象与JSON数组的长度和遍历方法 1.json对象的长度与遍历 结构:var json={“name”:”sm”,”sex”:”woman”} ...
- json格式的数据及遍历:
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- JSON语法、对象、遍历数组的区别和基本操作
JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是: ...
- 3.MUI端APP获取Json数据,并且实现遍历
在MUI中,对JSON的操作还是非常方便的. <script type="text/javascript"> var responseEl = document.get ...
- 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题
这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...
- JS/Jquery遍历JSON对象、JSON数组、JSON数组字符串、JSON对象字符串
JS遍历JSON对象 JS遍历JSON对象 <script> var obj = { "goodsid": "01001", "goods ...
- 【荐】使用eval()、new Function()将JSON字符串转换为JSON对象
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用j ...
- JSON.parse和JSON.stringify 参数详解
JSON.parse和JSON.stringify这两个浏览器自带(IE6/7除外)的方法平常我们经常用到,但是一般都只是用到了他们的第一个参数,比如字符串转对象:JSON.parse('{}') ...
随机推荐
- 无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题
最近在阿里云上租了个服务器,想借此发布一些自己制作的网页.于是就打算安装一下环境,考虑到搭建动态网站所要安装的环境比较多,于是就选择了wampserver这样一个集成环境的安装. 由于我的服务器很新( ...
- An item with the same key has already been added. Key: Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal.MySqlOptionsExtension
An item with the same key has already been added. Key: Pomelo.EntityFrameworkCore.MySql.Infrastructu ...
- 使用jieba库与wordcloud库第三方库进行词频统计
一.jieba库与wordcloud库的使用 1.jieba库与wordcloud库的介绍 jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最 ...
- Hibernate的多表关系
多表关系 一对多/多对一 O 对象 一的一方使用集合. 多的一方直接引用一的一方. R 关系型数据库 多的一方使用外键引用一的一方主键. M 映射文件: 一: <set name="& ...
- 服务器上运行程序Out of memory 解决办法
****** 服务器上跑过程序经常能遇到out of memory 这个问题,下面是我经常在实验室碰到的解决方法. 1.使用命令nvidia-smi,看到GPU显存被占满: 2.尝试使用 ps aux ...
- 将eclipse dynamic web project部署到指定的tomcat软件下的webapps文件夹中
- cached_property的使用
cached_property修饰过的函数,变成是对象的属性,该对象第一次引用该属性时,会调用函数,对象第二次引用该属性时就直接从词典中取了,这也说明引用属性是经过__getattritue__. c ...
- jakarta-taglibs-standard-1.1.0查找下载
- Spark sql 在yarn-cluster模式下找不到表
在hive里建一个数据库test,在数据库里建了一张表user,然后在Spark程序中使用Spark sql读取这张表 "select * form test.user" 当部署模 ...
- layui时间控件,获取页面选中的时间值。
先贴上html文档 <div class='layui-form'> <div class="layui-form-item"> <div class ...