JSON:JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式,也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。说白了,JSon就是一个JavaScript的数据传输格式或说标准。
一、JSON似而不是XML:
似:
JSON 是纯文本
JSON 具有“自我描述性”
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
不是:
没有结束标签
更短
读写的速度更快
能够使用内建的 JavaScript eval() 方法进行解析
使用数组
不使用保留字
当然,这些都是官方的说法,至于具体的体验在后面的例子中会有~~~
二、语法规则:
数据在名称/值对中:"firstName" : "John"
数据由逗号分隔:{ "firstName":"John" , "lastName":"Doe" }
花括号保存对象:
{"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
方括号保存数组:
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
最基本的格式问题,会用即可。
三、初级入门
1 创建包含JSON语法的JavaScript字符串
var txt = '{ "employees" : [' +
'{ "firstName":"Bill" , "lastName":"Gates" },' +
'{ "firstName":"George" , "lastName":"Bush" },' +
'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
2 使用Eval()进行解析:
var obj = eval ("(" + txt + ")");
3 在网页中使用JavaScript对象:
<p> First Name: <span id="fname"></span><br /> Last Name: <span id="lname"></span><br /> </p> <script type="text/javascript"> document.getElementById("fname").innerHTML = obj.employees[1].firstName document.getElementById("lname").innerHTML = obj.employees[1].lastName </script>
四、JSon在项目中
C#代码:
public void Query(HttpContext context)
{
context.Response.ContentType = "text/plain";
//===============================================================
//获取查询条件:【用户id,开始时间,结束时间,关键字】
string category, startTime, endTime, key;
category = startTime = endTime = key = "";
if (null != context.Request.QueryString["Category"])
{
category = context.Request.QueryString["Category"].ToString().Trim();
}
if (null != context.Request.QueryString["StartTime"])
{
startTime = context.Request.QueryString["StartTime"].ToString().Trim();
}
if (null != context.Request.QueryString["EndTime"])
{
endTime = context.Request.QueryString["EndTime"].ToString().Trim();
}
//if (null != context.Request.QueryString["KeyWord"])
//{
// key = context.Request.QueryString["KeyWord"].ToString().Trim();
//}
//================================================================
//获取分页和排序信息:页大小,页码,排序方式,排序字段
int pageRows, page;
pageRows = 10;
page = 1;
string order, sort, oderby; order = sort = oderby = "";
if (null != context.Request.QueryString["rows"])
{
pageRows = int.Parse(context.Request.QueryString["rows"].ToString().Trim());
}
if (null != context.Request.QueryString["page"])
{
page = int.Parse(context.Request.QueryString["page"].ToString().Trim());
}
if (null != context.Request.QueryString["sort"])
{
order = context.Request.QueryString["sort"].ToString().Trim();
}
if (null != context.Request.QueryString["order"])
{
sort = context.Request.QueryString["order"].ToString().Trim();
}
//===================================================================
//组合查询语句:条件+排序
StringBuilder strWhere = new StringBuilder();
//if (key != "")
//{
// strWhere.AppendFormat(" ScoreLevel like '%{0}%' and ", key);
//}
if (category != "")
{
strWhere.AppendFormat(" ExamineSign= '{0}' and ", category);
}
if (startTime != "")
{
strWhere.AppendFormat(" PublishDate >= '{0}' and ", startTime);
}
if (endTime != "")
{
strWhere.AppendFormat(" PublishDate <= '{0}' and ", endTime);
}
//删除多余的and
int startindex = strWhere.ToString().LastIndexOf("and");//获取最后一个and的位置
if (startindex >= 0)
{
strWhere.Remove(startindex, 3);//删除多余的and关键字
}
if (sort != "" && order != "")
{
//strWhere.AppendFormat(" order by {0} {1}", sort, order);//添加排序
oderby = order + " " + sort;
}
//DataSet ds = Bnotice.GetList(strWhere.ToString()); //调用不分页的getlist
//调用分页的GetList方法
DataSet ds = useractive.GetListByPage(strWhere.ToString(), oderby, (page - 1) * pageRows + 1, page * pageRows);
int count = useractive.GetRecordCount(strWhere.ToString());
// 通过ToJson将获取的Dataset格式的数据类型,转化为JSON类型
string strJson = ToJson.Dataset2Json(ds, count);
context.Response.Write(strJson);
context.Response.End();
C#,ToJson类:将获取的Dataset类型或者是Datatable类型的数据进行转化为Json类型
public class ToJson {
#region DataSet转换成Json格式
/// <summary>
/// DataSet转换成Json格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string Dataset2Json(DataSet ds, int total = -1)
{
StringBuilder json = new StringBuilder();
foreach (DataTable dt in ds.Tables)
{
//{"total":5,"rows":[
json.Append("{\"total\":");
if (total == -1)
{
json.Append(dt.Rows.Count);
}
else
{
json.Append(total);
}
json.Append(",\"rows\":[");
json.Append(DataTable2Json(dt));
json.Append("]}");
} return json.ToString();
}
#endregion
#region dataTable转换成Json格式
/// <summary>
/// dataTable转换成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Json(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
if (dt.Columns.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
return jsonBuilder.ToString();
}
#endregion dataTable转换成Json格式
}
HTML,传递给前台HTML界面:
<table id="tt" title="审核认证信息" class="easyui-datagrid" style="width: auto; height: 370px" idfield="itemid" pagination="true" iconcls="icon-save" data-options="rownumbers:true,url:'ExamineVerifyIdentity.ashx/ProcessRequest',pageSize:5,pageList:[5,10,15,20],method:'get',toolbar:'#tb' ," fitcolumns="true" striped="true">
<thead>
<tr>
<th data-options="field:'ck',checkbox:true"></th>
<th data-options="field:'RealName',width:100">用户姓名</th>
<th data-options="field:'IntroduceID',width:120,align:'right'">认证机构</th>
<th data-options="field:'renzhengxinxi',width:80,align:'right'">认证信息</th>
<th data-options="field:'RegisterTime',width:100">时间</th>
<th data-options="field:'ExamineSign',width:100">审阅状态</th>
<th data-options="field:'tongzhi',width:100">通知</th>
<th data-options="field:'ExamineSign',width:60,align:'center'">是否认证</th>
</tr>
</thead>
<input type="hidden" id="test" name="test" />
</table>
注意
1、其中的field是获取的Json字符串中对应的值
2、url是该页面调用的一般处理程序所在的路径
五、小结
通过简单的例子和在项目中的实践:
我们可以知道Json就是一种JavaScript的数据传输格式;
简单的了解和实践了Json的语法格式,创建,调用;
如何将从数据库获取的Dataset或是Datatable类型的数据转化为Json类型;
至于其优缺点以及技巧,需要在以后的实践中加以自己的理解和体会~~~