/// <summary>
/// 处理json
/// </summary>
/// <param name="json">json字符串</param>
/// <returns></returns>
private Hashtable JsonToHashTable(string json)
{
Hashtable ht = new Hashtable();
string jsonStr = json.Substring(1, json.Length - 2);//去掉首尾{}
jsonStr = jsonStr.Replace("\"", "").Replace("'", "").Replace(" ", "");//去掉所有" '
string[] jsonArr = SplitJson(jsonStr,",");
string str = null;
for (int i = 0; i < jsonArr.Length; i++)
{
str = jsonArr[i];
string[] arr = SplitJson(str,":");
//判断是否包含[ ]
if (arr[1].Contains("["))//做数组处理
{
List<Hashtable> subHtl = JsonToHashTableList(arr[1]);
ht.Add(arr[0], subHtl);
}
else if (arr[1].Contains("{"))//做json处理
{
Hashtable subHt = JsonToHashTable(arr[1]);
ht.Add(arr[0], subHt);
}
else
{
ht.Add(arr[0], arr[1]);
}
}
return ht;
}
/// <summary>
/// 处理json数组
/// </summary>
/// <param name="json">json数组字符串</param>
/// <returns></returns>
private List<Hashtable> JsonToHashTableList(string json)
{
List<Hashtable> htl = new List<Hashtable>();
string jsonStr = json.Substring(1, json.Length - 2);//去掉首尾[]
string[] jsonArr = SplitJson(jsonStr,",");
for (int j = 0; j < jsonArr.Length; j++)
{
Hashtable ht = JsonToHashTable(jsonArr[j]);
htl.Add(ht);
}
return htl;
}
/// <summary>
/// 依据传入的符号分割字符串
/// </summary>
/// <param name="json"></param>
/// <param name="code">冒号则只分割一次,逗号无视[],{}中的逗号分割</param>
/// <returns></returns>
private string[] SplitJson(string json,string code)
{
List<string> res = new List<string>();
if (code == ",")
{
//无视[],{}中的逗号分割
string pattern = @"(?<=\{|\[.*),(?=.*\}|\])";
string result = Regex.Replace(json, pattern, "####");//把[ ]和{ }中的逗号排除
string[] arr = result.Split(',');
string temp = null;
for (int i = 0; i < arr.Length; i++)
{
temp = arr[i].Replace("####", ",");//恢复[ ]和{ }中的逗号
res.Add(temp);
}
}
else if(code == ":")
{
//冒号则只分割一次
int index = json.IndexOf(code);
res.Add(json.Substring(0, index));
res.Add(json.Substring(index + 1, json.Length - index - 1));
}
return res.ToArray();
}
网友评论