- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Text.RegularExpressions;
- using System.Text;
- namespace System.JSON
- {
- static class JSONConvert
- {
- #region 全局变量
- private static JSONObject _json = new JSONObject();//寄存器
- private static readonly string _SEMICOLON = "@semicolon";//分号转义符
- private static readonly string _COMMA = "@comma"; //逗号转义符
- #endregion
- #region 字符串转义
- /// <summary>
- /// 字符串转义,将双引号内的:和,分别转成_SEMICOLON和_COMMA
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- private static string StrEncode(string text)
- {
- MatchCollection matches = Regex.Matches(text, "///"[^///"]+///"");
- foreach (Match match in matches)
- {
- text = text.Replace(match.Value, match.Value.Replace(":", _SEMICOLON).Replace(",", _COMMA));
- }
- return text;
- }
- /// <summary>
- /// 字符串转义,将_SEMICOLON和_COMMA分别转成:和,
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- private static string StrDecode(string text)
- {
- return text.Replace(_SEMICOLON, ":").Replace(_COMMA, ",");
- }
- #endregion
- #region JSON最小单元解析
- /// <summary>
- /// 最小对象转为JSONObject
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- private static JSONObject DeserializeSingletonObject(string text)
- {
- JSONObject jsonObject = new JSONObject();
- MatchCollection matches = Regex.Matches(text, "(///"(?<key>[^///"]+)///":///"(?<value>[^,///"]+)///")|(///"(?<key>[^///"]+)///":(?<value>[^,///"//}]+))");
- foreach (Match match in matches)
- {
- string value = match.Groups["value"].Value;
- jsonObject.Add(match.Groups["key"].Value, _json.ContainsKey(value) ? _json[value] : StrDecode(value));
- }
- return jsonObject;
- }
- /// <summary>
- /// 最小数组转为JSONArray
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- private static JSONArray DeserializeSingletonArray(string text)
- {
- JSONArray jsonArray = new JSONArray();
- MatchCollection matches = Regex.Matches(text, "(///"(?<value>[^,///"]+)/")|(?<value>[^,//[//]]+)");
- foreach (Match match in matches)
- {
- string value = match.Groups["value"].Value;
- jsonArray.Add(_json.ContainsKey(value) ? _json[value] : StrDecode(value));
- }
- return jsonArray;
- }
- /// <summary>
- /// 反序列化
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- private static string Deserialize(string text)
- {
- text = StrEncode(text);//转义;和,
- int count = 0;
- string key = string.Empty;
- string pattern = "(//{[^//[//]//{//}]+//})|(//[[^//[//]//{//}]+//])";
- while (Regex.IsMatch(text, pattern))
- {
- MatchCollection matches = Regex.Matches(text, pattern);
- foreach (Match match in matches)
- {
- key = "___key" + count + "___";
- if (match.Value.Substring(0, 1) == "{")
- _json.Add(key, DeserializeSingletonObject(match.Value));
- else
- _json.Add(key, DeserializeSingletonArray(match.Value));
- text = text.Replace(match.Value, key);
- count++;
- }
- }
- return text;
- }
- #endregion
- #region 公共接口
- /// <summary>
- /// 序列化JSONObject对象
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- public static JSONObject DeserializeObject(string text)
- {
- _json = new JSONObject();
- return _json[Deserialize(text)] as JSONObject;
- }
- /// <summary>
- /// 序列化JSONArray对象
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- public static JSONArray DeserializeArray(string text)
- {
- _json = new JSONObject();
- return _json[Deserialize(text)] as JSONArray;
- }
- /// <summary>
- /// 反序列化JSONObject对象
- /// </summary>
- /// <param name="jsonObject"></param>
- /// <returns></returns>
- public static string SerializeObject(JSONObject jsonObject)
- {
- StringBuilder sb = new StringBuilder();
- sb.Append("{");
- foreach (KeyValuePair<string, object> kvp in jsonObject)
- {
- if (kvp.Value is JSONObject)
- {
- sb.Append(string.Format("/"{0}/":{1},", kvp.Key, SerializeObject((JSONObject)kvp.Value)));
- }
- else if (kvp.Value is JSONArray)
- {
- sb.Append(string.Format("/"{0}/":{1},", kvp.Key, SerializeArray((JSONArray)kvp.Value)));
- }
- else if (kvp.Value is String)
- {
- sb.Append(string.Format("/"{0}/":/"{1}/",", kvp.Key, kvp.Value));
- }
- else
- {
- sb.Append(string.Format("/"{0}/":/"{1}/",", kvp.Key, ""));
- }
- }
- if (sb.Length > 1)
- sb.Remove(sb.Length - 1, 1);
- sb.Append("}");
- return sb.ToString();
- }
- /// <summary>
- /// 反序列化JSONArray对象
- /// </summary>
- /// <param name="jsonArray"></param>
- /// <returns></returns>
- public static string SerializeArray(JSONArray jsonArray)
- {
- StringBuilder sb = new StringBuilder();
- sb.Append("[");
- for (int i = 0; i < jsonArray.Count; i++)
- {
- if (jsonArray[i] is JSONObject)
- {
- sb.Append(string.Format("{0},", SerializeObject((JSONObject)jsonArray[i])));
- }
- else if (jsonArray[i] is JSONArray)
- {
- sb.Append(string.Format("{0},", SerializeArray((JSONArray)jsonArray[i])));
- }
- else if (jsonArray[i] is String)
- {
- sb.Append(string.Format("/"{0}/",", jsonArray[i]));
- }
- else
- {
- sb.Append(string.Format("/"{0}/",", ""));
- }
- }
- if (sb.Length > 1)
- sb.Remove(sb.Length - 1, 1);
- sb.Append("]");
- return sb.ToString();
- }
- #endregion
- }
- /// <summary>
- /// 取出JSON对象类
- /// </summary>
- public class JSONObject : Dictionary<string, object>
- {
- public new void Add(string key, object value)
- {
- System.Type t = value.GetType();
- if (t.Name == "String")
- {
- value = JSONEncode.StrEncodeForDeserialize(value.ToString());
- }
- base.Add(key, value);
- }
- public override string ToString()
- {
- return JSONConvert.SerializeObject(this);
- }
- public static JSONObject FromObject(string json)
- {
- return JSONConvert.DeserializeObject(json);
- }
- }
- /// <summary>
- /// 取出JSON数组类
- /// </summary>
- public class JSONArray : List<object>
- {
- public new void Add(object item)
- {
- System.Type t = item.GetType();
- if (t.Name == "String")
- {
- item = JSONEncode.StrEncodeForDeserialize(item.ToString());
- }
- base.Add(item);
- }
- public override string ToString()
- {
- return JSONConvert.SerializeArray(this);
- }
- public JSONArray FromObject(string json)
- {
- return JSONConvert.DeserializeArray(json);
- }
- }
- /// <summary>
- /// 字符串转义,将"{"、"}"、"""
- /// </summary>
- public class JSONEncode
- {
- public static readonly string _LEFTBRACES = "@leftbraces";//"{"转义符
- public static readonly string _RIGHTBRACES = "@rightbraces";//"}"转义符
- public static readonly string _LEFTBRACKETS = "@leftbrackets";//"["转义符
- public static readonly string _RIGHTBRACKETS = "@rightbrackets";//"]"转义符
- public static readonly string _DOUBLEQUOTATIONMARKS = "@doubleQuotationMarks";//"""转义符
- #region 字符串转义
- /// <summary>
- /// 字符串转义,将"{"、"}"、""",分别转换_LEFTBRACES、_RIGHTBRACES、_DOUBLEQUOTATIONMARKS
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- public static string StrEncodeForDeserialize(string text)
- {
- return text
- .Replace("{", _LEFTBRACES)
- .Replace("}", _RIGHTBRACES)
- .Replace("[", _LEFTBRACKETS)
- .Replace("]", _RIGHTBRACKETS)
- .Replace("/"", _DOUBLEQUOTATIONMARKS);
- }
- /// <summary>
- /// 字符串转义,将_LEFTBRACES、_RIGHTBRACES、_DOUBLEQUOTATIONMARKS,分别转换"{"、"}"、"""
- /// </summary>
- /// <param name="text"></param>
- /// <returns></returns>
- public static string StrDecodeForDeserialize(string text)
- {
- return text.Replace(_LEFTBRACES, "{")
- .Replace(_RIGHTBRACES, "}")
- .Replace(_LEFTBRACKETS, "[")
- .Replace(_RIGHTBRACKETS, "]")
- .Replace(_DOUBLEQUOTATIONMARKS, "/"");
- }
- #endregion
- }
- }
相关推荐
基于C#实现的对Json进行格式化字符串解析的.NET类库源码V3.0
基于C#实现的对Json进行格式化字符串解析的.NET类库源码V3.0.
C# 解析Json文件(使用NewtonJson库)
C#中解析json文件有很多种方法,在多种方法中一般都会提到一个十分优秀的库:NewtonJson。使用NewtonJson处理Json文件十分高效,而且在配置也十分简单,直接在Nuget包中导入即可。 目录 1.导入NewtonJson库 2.解析Json文件 2.1 最简单的序列化与反序列化 2.2 序列化集合和字典 2.3 反序列化集合和字典 2.4 将对象保存为Json文件...
使用基于python的neurora进行表征相似性分析(RSA)
发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。
c#如何判断一个类型是否为数值类型
需要实现一个读取json配置文件的功能,原方法为 public T ReadConfig<T>(string name,T defaultValue){ var vaue=JObject[name].ToString();//JObject是Newtonsoft.Json.Linq.JObject.Parse()获取的 if(string.IsNullOrWhiteSpace(value)){ re...
麒麟系统grub被锁怎么办?双密码遗忘救援指南(实测V10 SP3版本)
本文详细介绍了麒麟系统V10 SP3版本在GRUB和root密码双遗忘情况下的救援指南。通过ISO镜像进入救援模式,结合单用户模式操作,实现密码重置与系统权限恢复,特别适用于等保合规环境。
数字后端流程--place
Floorplan完成后芯片的大致框架已经出现,万里长征已经迈出特别重要的第一步了,前面的步骤我们已经完成了io port,macro的摆放,现在core外只剩下std cell(标准单元)了,Place这一步就是要把std cell放进core里。看到密密麻麻的std cell也不用紧张,因为放std cell不用像macro手动一个一个摆,工具就可以帮我们完成大部分工作。虽然这一步的工作只有一个,但也不是只要Place完就能进行下一步的,衡量Place质量是否满足标准会通过以下几点判断。
一个.NET通用JSON解析/构建类的实…
一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。 假设JSON对象内容如下: 隐藏行号 复制代码 ? JSON
避开这些坑!baostock获取股票数据时最容易犯的5个错误(Python实战)
本文针对使用Python和baostock库获取股票历史数据时常见的五大陷阱,提供了实战解决方案。重点剖析了登录状态验证、参数配置、数据解析、批量操作效率及数据一致性校验等关键环节,帮助开发者构建稳健高效的数据获取流程,避免因细节疏忽导致的数据错误或性能瓶颈。
C#解析JSON
全称“JavaScript Object Notation(JavaScript对象表示法)”,JSON 是存储和交换文本信息的语法。[ {"id" : 2 , "name" : "星河爆破" , "number" : 999 } , {"id" : 3 , "name" : "九星连珠" , "number" : 9 } , {"id" : 4 , "name" : "一语成谶" , "number" : 999 } ]学习JSON基础教程在线JSON解析及格式化验证网站。
傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)
本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。
Altium Concord Pro 的应用范围,安装,和使用范围
Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁
json教程之C#开发json解析类
json开始流行了,性能比xml快,所以好多js类库(如jquery)都支持json格式了,通过ASP.NET与js的结合操作json数据传递应该很爽,所以本文使用C#开发一个json类,在看文章前推荐你一些文章:实用C#中任意类型数据转成JSON格式数据输出http://www.aspxcs.net/HTML/1000041074.html以实例讲解json格式应用的json详细教程http:/
SAP S4 HANA 新资产会计中的平行分类账估值
在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。
C#解析json字符串为对应类
【代码】C#解析字符串为对应类。
在Keil uv5里面添加STC元器件库,不影响其他元件
先到网上下载stc.CBD(宏晶网站的地址实效了)还有STC新系列单片机的头文件,宏晶的网站就有1、在Keil/C51/INC下新建目录"STC"文件夹, 把所有STC新系列单片机的头文件拷贝到"STC"目录下。2、下载的用于keil下的STC器件数据库更名为STC.CDB并拷贝到Keil/UV4目录下。3、打开Keil文件夹下的TOOLS.ini文件。4、在[UV2]下键入CDB0="UV2\S
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
LitJson 将json 解析为C#类
Json 文件 [ { "ID" : 10001, "Type" : 8, "QuickMark" : 1, "MarkClass" : "HousePropertyData", "ShowConditional" : 1, "Conditionals" : ["前往指定房屋位置"], "ShowSchedule" : 0, "Schedule" : "", ...
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
[C#][JSON]c#-.net通过json解析构建类
在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。c["name"] = new JsonProperty("C# 网络核心编程");c["name"] = new JsonProperty("C#入门经典中文版");book["name"] = new JsonProperty("C#入门经典中文版");//如果属性为对象类型,可通过字符串索引简化。//通过字符串构建Json对象。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
ZT: C#不建类直接Json解析与取值
C#不建类直接Json解析与取值 2017年10月19日 15:58:22圆圆娃哈哈阅读数:701 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/lily233/article/details/78285908 1、添加引用Newtonsoft.Json.dll(附件:http...
JSON解析类(C#)
<br />使用本文中的JSONConvert类可将任意JSON字符串转化为JSONObject或JSONArray对象,并获取需要的值,克服了.NET自带JSON类反序列化时需知道并引用序列化时使用的类的缺点。当然,也可以使用JSONConvert类进行序列化,构造出JSON字符串。<br /> <br />JSON解析类<br />using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using
C# Json解析类,可用
public class AnalyzeJson { public string error = null; string val = ""; StringBuilder key = new StringBuilder(); StringBuilder value = new StringBuilder(); ...
2万+



被折叠的 条评论
为什么被折叠?



