最近工作中遇到的Json问题确实很头大,主要是各种转义符的处理,想了一种通用的方式,来处理任意转移方式的Json字符串:

        /// <summary>
/// 去除返回值中的转义符,返回json字符串
/// </summary>
/// <param name="str">待处理的转义符</param>
/// <returns></returns>
public static string RemoveALLEscape(string str)
{
string Json = "";
string temp = "";
//能否直接反序列化成为字典格式,如果不能,再判断是否为全转义的字符串,如果不能,就返回原值
try
{
Dictionary<string, object> data = JsonConvert.DeserializeObject<Dictionary<string, object>>(str);
Dictionary<string, object> dataNew = new Dictionary<string, object>();
foreach (var dic in data)//遍历字典,将每个json值转化为json字符串,自动去转义然后放到新的字典中;如果不是json格式的,就直接把原值放到新字典中
{
object Value = null;
if (dic.Value != null)
{
temp = RemoveALLEscape(dic.Value.ToString());//递归遍历每个值,去掉所有的转义符
try
{
var jo = JsonConvert.DeserializeObject(temp);
try
{
Value = JObject.Parse(jo.ToString());
}
catch
{
Value = JArray.Parse(jo.ToString());
} }
catch
{
Value = dic.Value;
}
dataNew.Add(dic.Key, Value);
}
else
{
dataNew.Add(dic.Key, "");
}
}
Json = JsonConvert.SerializeObject(dataNew);
}
catch (Exception ex)
{
string st = ex.Message;
Json = StringConvertTojson(str);
}
return Json;
} /// <summary>
/// 对json字符串进行去转义处理
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static string StringConvertTojson(string str)
{
string json = str;
try
{
var jo = JsonConvert.DeserializeObject(json);
try
{ JObject jobj = JObject.Parse(jo.ToString());
json = JsonConvert.SerializeObject(jobj);
}
catch
{
JArray jobj = JArray.Parse(jo.ToString());
json = JsonConvert.SerializeObject(jobj);
}
}
catch { }
return json; }

进行去转义处理主要是为了下一步的工作打算:根据维护好指定格式的Json路径,取出到该路径下的Json值,约定的Json格式如下(与Jmeter中使用JSON Extractor解析Json格式一致):

data.data.data[0].data

解析Json路径如下:

   /// <summary>
/// 根据Json路径去动态解析json,获取指定路径字段下的值
/// </summary>
/// <param name="JsonPath">维护好的Json路径,格式为data.data.data[0].data</param>
/// <param name="Resp">需要解析的Json,先做去转义和格式化处理</param>
/// <returns></returns>
private static dynamic GetJsonPath(string JsonPath, string Resp)
{ JObject jobj = JObject.Parse(Resp);
dynamic Value = null;
dynamic temp = null;
int Idex = ;
string[] Path = JsonPath.Split('.');
try
{
for (int i = ; i < Path.Length; i++)
{
string path = Path[i];
if (!path.Contains("[") && !path.Contains("]"))
{
if (i == )
{
temp = jobj[path];
}
else
{
temp = temp[path];
}
}
else if (Path[i].Contains("[") && Path[i].Contains("]"))
{
int idex = Path[i].IndexOf('[');
Path[i] = Path[i].Remove(, idex);
Path[i] = Path[i].Replace("]", "").Replace("[", "");
Idex = Convert.ToInt32(Path[i]);
path = path.Replace("[" + Idex + "]", "");
if (i == )
{
temp = jobj[path][Idex];
}
else
{
temp = temp[path][Idex];
}
}
if (i == (Path.Length - )) { Value = temp; }
}
}
catch (Exception ex)
{
Value = Path + "处理有误";
}
return Value;
}

最后是Json格式化:

/// <summary>
/// 格式化json字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ConvertJsonString(string str)
{ JsonSerializer serializer = new JsonSerializer();
TextReader tr = new StringReader(str);
JsonTextReader jtr = new JsonTextReader(tr);
object obj = serializer.Deserialize(jtr);
if (obj != null)
{
StringWriter textWriter = new StringWriter();
JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
{
Formatting = Formatting.Indented,
Indentation = ,
IndentChar = ' '
};
serializer.Serialize(jsonWriter, obj);
return textWriter.ToString();
}
else
{
return str;
}
}
}

C# Json处理相关的更多相关文章

  1. JS JSON对象相关

    1.多对象合并 将2个或2个以上对象(object{....})中的属性进行合并,即最后合并为一个object{.....} 解决办法:Object.assign 方法 var form = {nam ...

  2. .net core json配置相关用法

    在.net core中,配置文件差不多都是json文件.我们在开发程序的时候,可以使用系统默认的appsettings.json,可以自定义json配置文件.当json配置文件里面的参数改变时,程序也 ...

  3. Json概述以及python对json的相关操作

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  4. Json概述以及python对json的相关操作(转)

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  5. json字符串相关转换方法

    /** json转换为Map * @param jsonStr json * @return map集合 */ public static HashMap<String, String> ...

  6. python对json的相关操作

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  7. Json概述以及python对json的相关操作《转》

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  8. [转]python对json的相关操作

    json官方说明参见:http://json.org/ Python操作json的标准api库参考:http://docs.python.org/library/json.html 对简单数据类型的e ...

  9. json接口相关(建议结合JFinal框架)

    /** * */ package net.wicp.wvqusrtg; import java.util.HashMap; import net.sf.json.JSONArray; import n ...

  10. WebService返回数据前台获取并处理JSON的相关问题

    起因: 记录这个问题的起因是一次解答网友的问题,当初自己初次接触webservice时也遇到过,但在写答案时,并没有很深的印象,只是知道webservice在后台返回值的时候,那里是有个坑的.网友问的 ...

随机推荐

  1. H5测试与PC端测试不同的点

    1.通过H5网页(非手机的返回功能)的返回功能可以返回,不会出现无法返回的情况. 2.横屏竖屏相互切换,能自适应,并且布局不会乱掉: 3.为能在不同分辨率的手机上能更好的展示,建议采用响应式设计(如: ...

  2. python基础篇_005_迭代器和生成器

    Python迭代器和生成器 1.迭代器 迭代:可以将某个数据集内的数据“一个挨着一个的取出来” for i in range(1, 10, 2): # in 后面的对象必须是一个可迭代的 print( ...

  3. docker+fastdfs+nginx 实现分布式大文件存储系统以及视频缓存播放

    废话不多说,直接开撸 首先是一些准备工作: 1.关闭防火墙 service iptables stop --- fastdfs虽然在docker部署,但是使用的是主机网络,所以关闭防火墙. 2  下载 ...

  4. Spring异步调用原理及SpringAop拦截器链原理

    一.Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTI ...

  5. Hibernate 对象关系映射文件

    简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...

  6. python学习:注释、获取用户输入、字符串拼接、运算符、表达式

    注释 #为单行注释'''三个单引号(或者"""三个双引号)为多行注释,例如'''被注释的内容''' '''三个单引号还可以起到多行打印的功能. #ctrl+? 选中的多行 ...

  7. SPARK-18560

    ##### Receiver data can not be dataSerialized properly. ``` // :: ERROR executor.Executor: Exception ...

  8. 解决Tomcatt下连接数据库的classNoFount问题

    在数据库连接单独使用的时候.即作为一个独立类建立在mian方法中,可以正确的使用.例:连接MySql数据库 import java.sql.*; public class SQLtest { // J ...

  9. 配置Spark

    参考<深入理解Spark:核心思想与源码分析> Spark使用Scala进行编写,而Scala又是基于JVM运行,所以需要先安装JDK,这个不再赘述. 1.安装Scala 安装获取Scal ...

  10. Selenium 3----定位一组元素+多表单切换+多窗口切换

    定位一组元素 和定位单个元素类似,WebDriver提供了8种用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数. find_e ...