json格式數(shù)據(jù)分析工具PageElement類分享(仿Session寫法)
測(cè)試?yán)?
PageElement pe = new PageElement();
pe.LoadDataFromJsonString("[{\"A\":\"123\",\"B\":\"abc\"}]");
Console.WriteLine(pe["A"]); --輸出123
pe["B"]=1000;
Console.WriteLine(pe["B"]); --輸出1000
pe.DATATABLE:獲取數(shù)據(jù)的 DataTable 形式
pe.ToInsertSQL 轉(zhuǎn)SQL INSERT語句
pe.ToUpdateSQL 轉(zhuǎn)SQL UPDATE語句
namespace MyLib.ITSM.Base
{
using System;
using System.Collections.Generic;
using System.Xml;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
public class PageElement : IDictionary<string, object>
{
public List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>();
public PageElement() { }
public PageElement(string XmlString)
{
LoadElementFromXMLString(XmlString);
}
/// <summary>
/// JSON屬性
/// </summary>
public string JSON
{
get
{
if (list == null || list.Count == 0) return string.Empty;
{
string jsonstr = "{";
foreach (KeyValuePair<string, object> p in list)
{
jsonstr += p.Key + ":" + "\"" + p.Value.ToString() + "\",";
}
jsonstr = jsonstr.Substring(0, jsonstr.Length - 1);//去除最后一個(gè)逗號(hào)
jsonstr += "}";
return jsonstr;
}
}
}
/// <summary>
/// 是否已加載數(shù)據(jù)
/// </summary>
private bool _isloaded = false;
public bool IsLoaded
{
get
{
return _isloaded;
}
}
#region IDictionary<string,object> 成員
void IDictionary<string, object>.Add(string key, object value)
{
//key已存在,則不添加
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
{
return;
}
}
//向List中添加
list.Add(new KeyValuePair<string, object>(key, value));
}
public bool ContainsKey(string key)
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
{
return true;
}
}
return false;
}
public ICollection<string> Keys
{
get
{
string[] ks = new string[list.Count];
for (int i = 0; i < list.Count; i++)
{
ks[i] = list[i].Key;
}
return ks;
}
}
public bool Remove(string key)
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
{
list.Remove(k);
return true;
}
}
return false;
}
public bool TryGetValue(string key, out object value)
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
{
value = k.Value;
return true;
}
}
value = string.Empty;
return false;
}
public ICollection<object> Values
{
get
{
object[] vs = new object[list.Count];
for (int i = 0; i < list.Count; i++)
{
vs[i] = list[i].Value;
}
return vs;
}
}
public object this[string key]
{
get
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
{
return k.Value;
}
}
return null;
}
set
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
{
list.Remove(k);//刪除原節(jié)點(diǎn)
break;
}
}
KeyValuePair<string, object> knew = new KeyValuePair<string, object>(key, value);
list.Add(knew);
}
}
public object this[int index]
{
get
{
if (index <= list.Count)
{
return list[index].Value;
}
return null;
}
set
{
string key;
if (index <= list.Count)
{
key = list[index].Key.ToString();
list.RemoveAt(index);
KeyValuePair<string, object> knew = new KeyValuePair<string, object>(key, value);
list.Insert(index, knew);
}
}
}
#endregion
#region ICollection<KeyValuePair<string,string>> 成員
public void Add(KeyValuePair<string, object> item)
{
throw new NotImplementedException();
}
public void Clear()
{
list = new List<KeyValuePair<string, object>>();
}
public bool Contains(KeyValuePair<string, object> item)
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == item.Key)
{
return true;
}
}
return false;
}
public void CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)
{
throw new NotImplementedException();
}
public int Count
{
get { return list.Count; }
}
public bool IsReadOnly
{
get { throw new NotImplementedException(); }
}
public bool Remove(KeyValuePair<string, object> item)
{
foreach (KeyValuePair<string, object> k in list)
{
if (k.Key == item.Key)
{
list.Remove(k);
return true;
}
}
return false;
}
#endregion
#region IEnumerable<KeyValuePair<string,string>> 成員
public IEnumerator<KeyValuePair<string, object>> GetEnumerator()
{
return list.GetEnumerator();
}
#endregion
#region IEnumerable 成員
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return list.GetEnumerator();
}
#endregion
public override string ToString()
{
return JSON;
}
/// <summary>
/// 轉(zhuǎn)為FieldValue值
/// </summary>
/// <returns></returns>
public XmlDocument GetXmlObject()
{
//FieldValues fvs = new FieldValues();
//foreach (KeyValuePair<string, object> p in list)
//{
// fvs.Add(p.Key, p.Value.ToString());
//}
//return fvs.GetXmlObject();
return null;
}
/// <summary>
/// 從XML中載入頁面元素?cái)?shù)據(jù)
/// </summary>
/// <param name="xmlstr"></param>
public void LoadElementFromXMLString(string xmlstr)
{
_isloaded = false;
//try
//{
// FieldValues fvs = new FieldValues(xmlstr);
// foreach (FieldValue fv in fvs)
// {
// this[fv.ID] = fv.Value;
// }
//}
//catch { return; }
_isloaded = true;
}
/// <summary>
/// 從DataTable中載入頁面元素?cái)?shù)據(jù)
/// </summary>
/// <param name="xmlstr"></param>
public void LoadElementFromDataTable(DataTable dt)
{
_isloaded = false;
try
{
if (dt != null)
{
foreach (DataRow row in dt.Rows)
{
//遍歷行
foreach (DataColumn dc in dt.Columns)
{
this[dc.ColumnName] = row[dc];
}
}
}
}
catch { return; }
_isloaded = true;
}
/// <summary>
/// 從JSON中載入頁面元素?cái)?shù)據(jù)
/// </summary>
/// <param name="xmlstr"></param>
public void LoadElementFromJSONString(string json)
{
_isloaded = false;
try
{
List<string> jsList = GetFieldsString(json);
//生成列
foreach (string s in jsList)
{
string[] keyvalueSeparator = { ":" };
string key = s.Substring(0, s.IndexOf(':')).Trim();
string value = s.Substring(s.IndexOf(':') + 1).Trim();
if (key.Trim().StartsWith("\"") && key.Trim().EndsWith("\""))
{
//去除多余的雙引號(hào)
int end = key.Length - 2;
key = key.Substring(1, end);
}
if (value.Trim().StartsWith("\"") && value.Trim().EndsWith("\""))
{
//去除多余的雙引號(hào)
int end = value.Length - 2;
value = value.Substring(1, end);
//PageElement類型的內(nèi)容
if (value.StartsWith("{") && value.EndsWith("}"))
{
value = value.Replace("\\", string.Empty);//祛除多余轉(zhuǎn)義符
PageElement peChild = new PageElement();
peChild.LoadElementFromJSONString(value);
this[key] = peChild;
}
else //普通類型的內(nèi)容解析
{
//若列值存在
this[key] = ConvertToGB(value);
}
}
}
}
catch
{
return;
}
_isloaded = true;
}
/// <summary>
/// 把Unicode解碼為普通文字
/// </summary>
/// <param name="unicodeString">要解碼的Unicode字符集</param>
/// <returns>解碼后的字符串</returns>
private string ConvertToGB(string unicodeString)
{
string[] strArray = unicodeString.Split(new string[] { @"\u" }, StringSplitOptions.None);
string result = string.Empty;
for (int i = 0; i < strArray.Length; i++)
{
if (strArray[i].Trim() == "" || strArray[i].Length < 2 || strArray.Length <= 1)
{
result += i == 0 ? strArray[i] : @"\u" + strArray[i];
continue;
}
for (int j = strArray[i].Length > 4 ? 4 : strArray[i].Length; j >= 2; j--)
{
try
{
result += char.ConvertFromUtf32(Convert.ToInt32(strArray[i].Substring(0, j), 16)) + strArray[i].Substring(j);
break;
}
catch
{
continue;
}
}
}
return result;
}
/// <summary>
/// 獲取字段Json字符串
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
private List<string> GetFieldsString(string jsonS)
{
List<string> retfieldsstring = new List<string>();
if (jsonS == string.Empty)
return retfieldsstring;
string json = jsonS.Trim();
//祛除首尾
if (json.StartsWith("[") && json.EndsWith("]"))
{
int length = json.Length - 2;
json = json.Substring(1, length);
}
//是json格式的字串,以{開頭,以}結(jié)尾
if (json.StartsWith("{") && json.EndsWith("}"))
{
int jsonlength = json.Length - 1;
string str = json.Substring(1, jsonlength - 1) + ",";
//祛除頭尾的"{","}"
int startPos = 0; //搜索開始的位置指針
int length = 0; //搜索結(jié)束的位置指針
int flagcount = 0; //對(duì)象開始字符的個(gè)數(shù),根據(jù)此個(gè)數(shù)排除結(jié)束標(biāo)志
//遍歷得到內(nèi)部字符串
while (startPos + length < str.Length) //未搜索完成,則繼續(xù)搜索
{
if (str[startPos + length] == '{')
{
flagcount += 1;
}
else if (str[startPos + length] == '}')
{
if (flagcount > 0) //若開始字符的個(gè)數(shù)不等于0,則字符中間存在對(duì)象,應(yīng)將標(biāo)志位減1并且排除
{
flagcount -= 1;
}
}
else if (str[startPos + length] == ',')
{
if (flagcount == 0)
{
retfieldsstring.Add(str.Substring(startPos, length));
startPos = startPos + length + 1;//新的起始位置
length = 0; //新的截取長度
}
}
length += 1; //末尾指針加1,進(jìn)入下一次循環(huán)的搜索
}
return retfieldsstring;
}
return retfieldsstring;
}
/// <summary>
/// 轉(zhuǎn)為Sql Insert 語句
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public string ToInsertSQL(string TableName)
{
string sql = @"INSERT INTO " + TableName + "(";
string fields = string.Empty;
string values = string.Empty;
foreach (KeyValuePair<string, object> p in list)
{
fields += p.Key + ",";
//values += StringTool.SqlQ(p.Value.ToString()) + ",";
}
fields = fields.Substring(0, fields.Length - 1);//去除最后一個(gè)逗號(hào)
values = values.Substring(0, values.Length - 1);//去除最后一個(gè)逗號(hào)
sql += fields + ") VALUES (" + values + ")";
return sql;
}
/// <summary>
/// 轉(zhuǎn)為Sql Update 語句
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public string ToUpdateSQL(string TableName, string wherefield)
{
string sql = @"UPDATE " + TableName + " Set ";
foreach (KeyValuePair<string, object> p in list)
{
//sql += p.Key + " = " + StringTool.SqlQ(p.Value.ToString()) + ",";
}
sql = sql.Substring(0, sql.Length - 1);//去除最后一個(gè)逗號(hào)
//sql += " WHERE " + wherefield + " = " + StringTool.SqlQ(this[wherefield].ToString());
return sql;
}
/// <summary>
/// 轉(zhuǎn)為Sql 查詢 語句
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public object[] ToWhereSQL()
{
object[] o = new object[2];
string sql = @" where 1=1 ";
DbParameter[] dbp = new DbParameter[list.Count];
int index = 0;
foreach (KeyValuePair<string, object> f in list)
{
if (f.Value is string)
{
if (!f.Key.Contains("#"))
{
sql += " and " + f.Key + " like '%'+@" + f.Key + "+'%'";
}
else
{
string op = f.Key.Split('#')[1].ToString();
if (op.Trim() == "L") //前半部相配
{
sql += " and " + f.Key.Split('#')[0] + " like '%'+@" + f.Key + "";
}
else if (op.Trim() == "R") //后半部相配
{
sql += " and " + f.Key.Split('#')[0] + " like @" + f.Key + "+'%'";
}
else if (op.Trim() == "E") //字符串相等
{
sql += " and " + f.Key.Split('#')[0] + " = @" + f.Key;
}
}
}
if (f.Value is int || f.Value is decimal || f.Value is double)
{
if (!f.Key.Contains("#")) //無條件,直接帶入
{
sql += " and " + f.Key + " = @" + f.Key;
}
else
{
string op = f.Key.Split('#')[1].ToString();
if (op.Trim() == "G") //大于
{
sql += " and " + f.Key.Split('#')[0] + " > @" + f.Key;
}
else if (op.Trim() == "L") //小于
{
sql += " and " + f.Key.Split('#')[0] + " < @" + f.Key;
}
else if (op.Trim() == "NE") //不等于
{
sql += " and " + f.Key.Split('#')[0] + " <> @" + f.Key;
}
else if (op.Trim() == "GE") //大于等于
{
sql += " and " + f.Key.Split('#')[0] + " >= @" + f.Key;
}
else if (op.Trim() == "LE") //小于等于
{
sql += " and " + f.Key.Split('#')[0] + " <= @" + f.Key;
}
else if (op.Trim() == "E")
{
sql += " or " + f.Key.Split('#')[0] + " = @" + f.Key;
}
}
}
SqlParameter sp = new SqlParameter(f.Key, f.Value);
dbp[index] = sp;
index += 1;
}
o[0] = sql;
o[1] = dbp;
return o;
}
}
}
- Js從頭學(xué)起(基本數(shù)據(jù)類型和引用類型的參數(shù)傳遞詳細(xì)分析)
- jquery處理json數(shù)據(jù)實(shí)例分析
- 數(shù)據(jù)類型和Json格式分析小結(jié)
- js下獲取div中的數(shù)據(jù)的原理分析
- javascript多種數(shù)據(jù)類型表格排序代碼分析
- jQuery解析json數(shù)據(jù)實(shí)例分析
- 深入分析jquery解析json數(shù)據(jù)
- 基于JavaScript 數(shù)據(jù)類型之Boolean類型分析介紹
- 利用Javascript仿Excel的數(shù)據(jù)透視分析功能
相關(guān)文章
C#巧用DateTime預(yù)設(shè)可選的日期范圍(如本年度、本季度、本月等)
這篇文章主要介紹了C#巧用DateTime預(yù)設(shè)可選的日期范圍,如本年度、本季度、本月等,感興趣的小伙伴們可以參考一下2016-04-04C#同步網(wǎng)絡(luò)時(shí)間的方法實(shí)例詳解
這篇文章主要介紹了C#同步網(wǎng)絡(luò)時(shí)間的方法,以實(shí)例形式較為詳細(xì)的分析了C#獲取網(wǎng)絡(luò)時(shí)間與同步本機(jī)系統(tǒng)時(shí)間的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析
#line 指令可能由生成過程中的自動(dòng)中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號(hào)生成輸出,則可以移除行,然后用 #line 模擬原始行號(hào)2014-01-01Unity實(shí)現(xiàn)人物平滑轉(zhuǎn)身
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)人物平滑轉(zhuǎn)身,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01C#利用win32 Api 修改本地系統(tǒng)時(shí)間、獲取硬盤序列號(hào)
這篇文章主要介紹了C#利用win32 Api 修改本地系統(tǒng)時(shí)間、獲取硬盤序列號(hào)的方法及代碼分享,需要的朋友可以參考下2015-03-03WinForm實(shí)現(xiàn)為ComboBox綁定數(shù)據(jù)源并提供下拉提示功能
這篇文章主要介紹了WinForm實(shí)現(xiàn)為ComboBox綁定數(shù)據(jù)源并提供下拉提示功能,是非常實(shí)用的功能,需要的朋友可以參考下2014-08-08C#實(shí)現(xiàn)把指定數(shù)據(jù)寫入串口
這篇文章主要介紹了C#實(shí)現(xiàn)把指定數(shù)據(jù)寫入串口,直接給出示例代碼,需要的朋友可以參考下2015-06-06