json转换为键值对辅助类
/// <summary>
/// json转换为键值对辅助类
/// </summary>
public class JsonParser
{ private static Dictionary<string, string> lst_KeyValueData = null; public static Dictionary<string, string> SplitJsonStringToKeyValuePairs(string jsonStr)
{
char jsonBeginToken = '{';
char jsonEndToken = '}'; if (string.IsNullOrEmpty(jsonStr))
{
return null;
}
//验证json字符串格式
if (jsonStr[] != jsonBeginToken || jsonStr[jsonStr.Length - ] != jsonEndToken)
{
throw new ArgumentException("非法的Json字符串!");
} lst_KeyValueData = new Dictionary<string, string>(); JObject jobj = new JObject(); // 转换为json对象
jobj = JObject.Parse(jsonStr);
ParseJsonProperties(jobj); return lst_KeyValueData; } private static void ParseJsonProperties(JObject jObject)
{
IEnumerable<JProperty> jObject_Properties = jObject.Properties(); JTokenType[] validPropertyValueTypes = { JTokenType.String, JTokenType.Integer, JTokenType.Float, JTokenType.Boolean, JTokenType.Null, JTokenType.Date, JTokenType.Bytes, JTokenType.Guid, JTokenType.Uri, JTokenType.TimeSpan };
List<JTokenType> propertyTypes = new List<JTokenType>(validPropertyValueTypes); JTokenType[] validObjectTypes = { JTokenType.String, JTokenType.Array, JTokenType.Object };
List<JTokenType> objectTypes = new List<JTokenType>(validObjectTypes); foreach (JProperty property in jObject_Properties)
{ try
{
if (propertyTypes.Contains(property.Value.Type))
{
ParseJsonKeyValue(property, property.Name.ToString());
}
else if (objectTypes.Contains(property.Value.Type))
{
//Arrays ex. { names: ["first": "John", "last" : "doe"]}
if (property.Value.Type == JTokenType.Array && property.Value.HasValues)
{
ParseJsonArray(property);
} //Objects ex. { name: "john"}
if (property.Value.Type == JTokenType.Object)
{
JObject jo = new JObject();
jo = JObject.Parse(property.Value.ToString());
string paramName = property.Name.ToString(); lst_KeyValueData.Add(paramName, property.Value.ToString()); if (jo.HasValues)
{
ParseJsonProperties(jo);
} }
}
}
catch (Exception ex)
{
throw;
}
} // End of ForEach } private static void ParseJsonKeyValue(JProperty item, string paramName)
{
lst_KeyValueData.Add(paramName, item.Value.ToString());
} private static void ParseJsonArray(JProperty item)
{
JArray jArray = (JArray)item.Value; string paramName = item.Name.ToString();
lst_KeyValueData.Add(paramName, item.Value.ToString()); try
{
for (int i = ; i < jArray.Count; i++)
{ paramName = i.ToString();
lst_KeyValueData.Add(paramName, jArray.Values().ElementAt(i).ToString()); JObject jo = new JObject();
jo = JObject.Parse(jArray[i].ToString());
IEnumerable<JProperty> jArrayEnum = jo.Properties(); foreach (JProperty jaItem in jArrayEnum)
{
var paramNameWithJaItem = jaItem.Name.ToString(); var itemValue = jaItem.Value.ToString(Formatting.None);
if (itemValue.Length > )
{
switch (itemValue.Substring(, ))
{
case "[":
//Recusion call to itself
ParseJsonArray(jaItem);
break;
case "{":
//Create a new JObject and parse
JObject joObject = new JObject();
joObject = JObject.Parse(itemValue); //For this value, reparse from the top
ParseJsonProperties(joObject);
break;
default:
ParseJsonKeyValue(jaItem, paramNameWithJaItem);
break;
}
}
}
} //end for loop }
catch (Exception ex)
{
throw;
}
}
}
json转换为键值对辅助类的更多相关文章
- C# 给枚举定义DescriptionAttribute,把枚举转换为键值对
在C#中,枚举用来定状态值很方便,例如我定义一个叫做Season的枚举 public enum Season { Spring = 1, Summer = 2, Autumn = 3, Winter ...
- JSON创建键值对(key是中文或者数字)方式详解
JSON创建键值对(key是中文或者数字)方式详解 先准备好一个空的json对象 var obj = {}; 1. 最原始的方法 obj.name = 'zhangsan'; //这种方式很简单的添加 ...
- 【C#基础】 读取json某个键值
/// <summary> /// 用JSObject的方法获取json指定第一层某个键的值 /// </summary> /// <param name="j ...
- 把Javascript 对象转换为键值对连接符字符串的方法总结
307down votefavorite 93 Do you know a fast and simple way to encode a Javascript Object into a strin ...
- 很傻很二很简单的一个问题,json键值为变量如何取值
js里的json的键值是变量的话,那么传统的做法似乎不管用了. 例如: var json={'a':'123','b':'999'} json.a得到123,如果a用变量表示呢,有笨法for循环 ...
- Visual Studio 2015 将json转换为实体类
最新写的一个接口需要接收json参数,然后序列化为实体类然后再进行后面的逻辑处理.因为json中键值对比较多,逐一去手写实体中的每个属性太麻烦,于是寻思是否有这样的工具可以将json转换为实体类. 经 ...
- Learning Spark 第四章——键值对处理
本章主要介绍Spark如何处理键值对.K-V RDDs通常用于聚集操作,使用相同的key聚集或者对不同的RDD进行聚集.部分情况下,需要将spark中的数据记录转换为键值对然后进行聚集处理.我们也会对 ...
- 利用FastJson,拼接复杂嵌套json数据&&直接从json字符串中(不依赖实体类)解析出键值对
1.拼接复杂嵌套json FastJson工具包中有两主要的类: JSONObject和JSONArray ,前者表示json对象,后者表示json数组.他们两者都能添加Object类型的对象,但是J ...
- js循环json得到 键和值
var jsondata=[{"男":4,"女":3,"不详":0},{"男one":23,"女two&quo ...
随机推荐
- 【Cocos2d-X开发学习笔记】第10期:渲染框架之几何图形的绘制
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.图形的绘制 有时为了调试游戏,我们常常会需要 ...
- stm32开发笔记一:使用固件库在RealView-MDK中新建工程(上)
很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE.虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末, ...
- [转]百度地图点聚合MarkerClusterer移动地图时,Marker的Label丢失的问题
参考文献:http://www.cnblogs.com/jicheng1014/p/3143859.html 问题现象: 使用MarkerClusterer_min.js,可以实现点聚合,但是当将带有 ...
- python_Opencv_使用Matplotlib模块
使用Matplotlib模块 Matplotib 是python 的一个绘图库,里头有各种各样的绘图方法. 之后会陆续了解.先学习怎样用Matplotib 显示图像. 可以放大图像,保存图像. 安装M ...
- Sublime text 3 格式化HTML/css/js/json代码 插件
JsFormat: 这里下载这插件包 https://github.com/jdc0589/JsFormat ,点油下角的zip就能下载 插件包放到sublime安装目录的Data\Packages目 ...
- @Query注解的用法(Spring Data JPA)
参考文章:http://www.tuicool.com/articles/jQJBNv 1. 一个使用@Query注解的简单例子 @Query(value = "select name,au ...
- 零基础学习IOS开发(二)- 使用cocos2d-x3.0 执行Hello world
关于开发框架,依据网上检索来的信息,感觉cocos2d-x的ios游戏开发框架非常不错,并且有非常强的可移植性,因此打算尝试一下. 截止写下此文章,最新的cocos2d-x的版本号为v3.0稳定版(几 ...
- [ES6] Converting an array-like object into an Array with Array.from()
Array.from() lets you convert an "iterable" object (AKA an array-like object) to an array. ...
- 《C专家编程》之一
一.解决函数返回指针的几种方法 1. 返回一个指向字符串常量的指针. 例子: char* func() { rturn "Only work for simple strings" ...
- MVP模式 详解 案例
介绍 MVC: View:对应于布局文件 Model:业务逻辑和实体模型 Controllor:对应于Activity 实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,造 ...