项目拾遗——JSon再体验
来源:互联网 发布:继承者们装扮知乎 编辑:程序博客网 时间:2024/06/07 08:31
JSON:JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式,也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。说白了,JSon就是一个JavaScript的数据传输格式或说标准。
JSON 是纯文本
JSON 具有“自我描述性”
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
不是:
没有结束标签
更短
读写的速度更快
能够使用内建的 JavaScript eval() 方法进行解析
使用数组
不使用保留字
数据由逗号分隔:{ "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" }
一、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].firstNamedocument.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类型;
至于其优缺点以及技巧,需要在以后的实践中加以自己的理解和体会~~~
3 0
- 项目拾遗——JSon再体验
- 项目拾遗——动态地图准确定位
- 项目拾遗——省市县三级联动
- 项目拾遗
- C++拾遗之1---初步体验项目1-求圆柱表面积
- C++拾遗之1---初步体验项目2-求并联电阻阻值
- C++拾遗之1---初步体验项目3-求两个数的正差值
- C++拾遗之1---初步体验项目4-求四个数的最大值
- C++拾遗之1---初步体验项目5-求四个数的升序排序
- Python基础——拾遗
- Java static——拾遗
- 【C#拾遗】——泛型
- 项目3——体验复杂度 (1)
- 项目3——体验复杂度
- 第七周项目四—“撞错”体验
- 第七周 项目二—VS2008体验
- 第二周项目3—体验复杂度
- 第二周项目3—体验复杂度
- LeetCode(13) RomanToInteger
- Hadoop集群_Hadoop安装配置
- nginx重启失败
- flowPlayer播放flv视频基本设置
- 即时通讯之女生喜欢的游戏
- 项目拾遗——JSon再体验
- 正则表达式基础及高级应用
- Hadoop2.2.0 Ubuntu12.04单节点安装
- java 判断一个数是否为素数(质素)
- 数据结构面试题之二--栈和队列
- 百度UEditor新增自定义按钮无效的解决方法
- ifconfig route
- Android分辨率常识&多分辨率适配
- Spring中配置事务的几种方式