星五博客

WebPascal脚本模型教程 - js解析dataset数据集

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,应用非常广泛。

通过之前的教程,我们知道脚本模型中有个DBQueryToJSON函数,可以直接将数据库中查询来的数据输出成JSON格式的字符串,但为了便于Delphi开发人员方便的将JSON转换成Dataset对象,所以保留了rtc json的特点,js无法直接识别这个json串,但我们只要简单的用js处理一下,也能方便的识别出来,以下是识别的演示代码:

<?
//连接 MSAccess 数据库的连接字符串
$s:=DBConn('mydb','DriverID=MSAcc;Database=.\db.mdb;');

UnicodeToAnsi(DBQueryToJSON('mydb','select * from tuser'));
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

	<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
	
	<script type="text/javascript">
	function test(){
	//先返回json内容,以便查阅
	$.ajax({
    url: "db.api",
    headers:{},
    type:"GET",
    success: function(result){
			$("#aaa").html(result);
		},
    dataType: "text"
    });
	//开始使用js识别json数据
	$.ajax({
    url: "db.api",
    headers:{},
    type:"GET",
    success: function(result){
			//将返回的json串去掉\/后,js就能直接识别json串了。
			var parsedJson = jQuery.parseJSON(
                result.replace(/\\\/dsfields/,'dsfields').replace(/\\\/dsrows/,'dsrows'));
			$("#bbb").html("");//先清空一下,因为后面我是用append添加
			
			//获取字段
			//$("#bbb").html(parsedJson.dataset.dsfields[0].name);
			$.each(parsedJson.dataset.dsfields, function(i, item) {
				$("#bbb").append("name:"+item.name);
				if (item.type=="W")
				{$("#bbb").append(" type:字符串");}
				else if (item.type=="I")
				{$("#bbb").append(" type:数值");}
				else if (item.type=="WM")
				{$("#bbb").append(" type:备注");}
				if (item.size!=undefined){$("#bbb").append(" size:"+item.size);}
				$("#bbb").append("<hr/>");
			});

			//获取内容
			//$("#bbb").append(parsedJson.dataset.dsrows[0][0]);
			$.each(parsedJson.dataset.dsrows, function(j, item) {
			var count = 0;
				$.each(parsedJson.dataset.dsrows[j], function(i, item) {
					$("#bbb").append(item);
					if (++count!=parsedJson.dataset.dsrows[j].length){
						$("#bbb").append(",");
					}
				});
				$("#bbb").append("<hr/>");
			});

		},
    dataType: "text"
    });
  }
</script>
</head>
<body>
<button type="button" onclick="test();">测试</button>
<br>
<div id="aaa">...</div>
====================================
<div id="bbb">...</div>
</body>
</html>

看明白了吗?对,仅仅是将“\/”去掉就可以了,是不是很简单?

当然,在正常的开发过程中,是不建议这样处理的,因为浏览器限制比较多,你通过js去处理,效率是非常低下的,你应该在脚本中处理,比如使用DBQuery函数获取数据后,循环输出拼接后的内容为JSON串,这样效率就高很多了。

附效果图: