C# Json处理相关
最近工作中遇到的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处理相关的更多相关文章
- JS JSON对象相关
1.多对象合并 将2个或2个以上对象(object{....})中的属性进行合并,即最后合并为一个object{.....} 解决办法:Object.assign 方法 var form = {nam ...
- .net core json配置相关用法
在.net core中,配置文件差不多都是json文件.我们在开发程序的时候,可以使用系统默认的appsettings.json,可以自定义json配置文件.当json配置文件里面的参数改变时,程序也 ...
- Json概述以及python对json的相关操作
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...
- Json概述以及python对json的相关操作(转)
什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...
- json字符串相关转换方法
/** json转换为Map * @param jsonStr json * @return map集合 */ public static HashMap<String, String> ...
- python对json的相关操作
什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...
- Json概述以及python对json的相关操作《转》
什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...
- [转]python对json的相关操作
json官方说明参见:http://json.org/ Python操作json的标准api库参考:http://docs.python.org/library/json.html 对简单数据类型的e ...
- json接口相关(建议结合JFinal框架)
/** * */ package net.wicp.wvqusrtg; import java.util.HashMap; import net.sf.json.JSONArray; import n ...
- WebService返回数据前台获取并处理JSON的相关问题
起因: 记录这个问题的起因是一次解答网友的问题,当初自己初次接触webservice时也遇到过,但在写答案时,并没有很深的印象,只是知道webservice在后台返回值的时候,那里是有个坑的.网友问的 ...
随机推荐
- (一)shell脚本入门
shell脚本入门 1.脚本格式 脚本以#!/bin/bash 开头(指定解析器) 2.第一个shell脚本:helloworld (1)需求:创建一个shell脚本,输出helloworld 运行: ...
- Django 学习第十一天——中间键和上下文处理器
一.中间键的引入: Django中间件(Middleware)是一个轻量级.底层的"插件"系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. djang ...
- 第八篇 Flask配置
Flask 是一个非常灵活且小而精的web框架 , 那么灵活性从什么地方体现呢? 列如 Flask配置,这个东西怎么用呢? 它能给我们带来怎么样的方便呢? app配置 首先展示一下: from fl ...
- ARC 103
目录 官方题解 C 官方题解 C 这道题教会了我怎样正确统计众数和第二众数........... 我之前的方法是错的 #include <bits/stdc++.h> using name ...
- Object 中 equals()使用
详细看: https://www.cnblogs.com/naihuangbao/p/9445027.html 1. ==是判断两个变量或实例是不是指向同一个内存空间equals是判断两个变量或实例所 ...
- centos7中安装pg数据库
# centos中安装的命令 # yum install postgresql-server.x86_64 # 安装之前可以通过以下命令价差是否已经安装过 rpm -qa | grep postgre ...
- NOIP-机器翻译
题目描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查 ...
- Chrome_查看 webSocket 连接信息
1.以下代码实现一个webSocket连接,在文本输入框中输入内容,点击发送,通过服务器,返回相同的内容显示在下方. <!DOCTYPE html> <html lang=" ...
- 中文乱码总结之web乱码情景
情景1.当servlet返回js脚本时弹出框显示中文乱码: 解决:在servlet中加上response.setContentType(“text/html;charset=utf-8”); 情景2. ...
- Java常用类库 读书笔记 一
1.String Buffer 类 String 类所表示的字符串有一个局限就是字符串常量一旦声明则不可改变,只有内存地址的指向可以改变,如果要频繁修改字符串,需要使用String Buffer 类. ...