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 ...
随机推荐
- swift - use backslash to add the value in the string
There’s an even simpler way to include values in strings: Write the value in parentheses, and write ...
- Object -C Dictionary -- 笔记
// // main.m // dictionary // // Created by facial on 24/8/15. // Copyright (c) 2015 facial_huo. ...
- "解密"微信开放高级接口 企业如何应对
今天(2013年10月29日)腾讯终于对外公开了微信公众平台最新的接口,一石激起千层浪,对于很多微信公众平台的运营人员来说,今天是令人兴奋的一天!微信在向申请服务号的企业开发了大量接口.用户不想输入文 ...
- hdu 2844
本题的特殊性是价值与重量相等 将第i种物品分成若干件物品,其中每件物品有一个系数, 这件物品的费用和价值均是原来的费用和价值乘以这个系数. 使这些系数分别为1,2,4,…,2^(k-1),n[i]-2 ...
- 第一章 工欲善其事 必先利其器—Android SDK工具(3)
1.3没有真机一样开发--Android模拟器 有些时候,我们手头上可能并没有符合要求的Android设备.那么这时候我们是不是对调试或者开发就一筹莫展了呢?当然不是.由于我们有Android模拟器. ...
- repeater 分页显示数据
表名:ChinaStates 控件:Repeater 查询代码DA: public class ChinaStatesDA { private DataClassesDataContext Conte ...
- OD: File Vulnerabilities & Protocols & Fuzz
IE.Office 等软件有个共同点,即用文件作为程序的主要输入,但攻击者往往会挑战程序员的假定和假设. 文件格式 Fuzz 就是利用畸形文件测试软件的稳健性,其流程一般包括: * 以一个正常文件作为 ...
- DNN模块开发之利器篇:七种武器
我们在进行DNN模块开发时经常需要调用Dotnetnuke.dll中的方法函数,模块开发用到DNN的方法函数会让你的开发更加得心应手,下面我们就来介绍一下. 1) PortalModuleBase ...
- Debugging Failed Because Integrated Windows Authentication Is Not Enabled
To enable integrated Windows authentication Log onto the Web server using an administrator account. ...
- 如何动态修改grid的列名
有这样的需求,搜索时候会选择搜索类型,每种搜索类型展示的列名不一样 如何动态修改grid的列名 效果图:点击bColumn页面切换成bColumn 实现思路:通过grid的reconfigure方法, ...