关于asp输出json对象的方法及实例

5 篇文章 0 订阅
3 篇文章 0 订阅
相信大家对于asp和json都不陌生,当下json应用的非常广泛,但asp语言中并没有可以直接生成json对象的方法,我在网上查了很多资料,关于asp生成json对象的方法,大多都写得很简单,大多很差强人意,有的虽然是写了关键的代码,但并没有实际的案例可供参考。现在我就把我实现的代码贴出来供大家参考。


1.目的:用asp得到json对象:

{"total":17,"rows":[{"News_ID":54,"NewsType_id":78},{"News_ID":55,"NewsType_id":78},{"News_ID":56,"NewsType_id":78},{"News_ID":57,"NewsType_id":78},{"News_ID":58,"NewsType_id":78},{"News_ID":59,"NewsType_id":78},{"News_ID":60,"NewsType_id":78},{"News_ID":61,"NewsType_id":78},{"News_ID":62,"NewsType_id":78},{"News_ID":63,"NewsType_id":78},{"News_ID":64,"NewsType_id":78},{"News_ID":65,"NewsType_id":78},{"News_ID":106,"NewsType_id":78},{"News_ID":107,"NewsType_id":78},{"News_ID":126,"NewsType_id":78},{"News_ID":192,"NewsType_id":78},{"News_ID":194,"NewsType_id":78}]}

这是我们将得到的json数据。


2.需要引用的文件

  后台需要引入json类文件:  json.asp   ,   

  前台需要引入常用的文件: json2.js<mrak: 这个文件可以到json官网去下载> ,  jquery.js<mark: 这个文件太常见了,不用我说了吧> 


3.后台程序代码:(关键的来了)

index_json.asp 页面代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Response.Addheader "Content-Type","text/html; charset=utf-8"  %>
<!--#include file="inc/json.asp"-->
<!--#include file="inc/Conn.asp" -->
<%
    Dim sql_class,sql_top,sql_colums,sql_whereBy,sql_orderBy
    sql_class = request.Item("sql_class")
    sql_top = request.Item("sql_top")
    sql_colums = request.Item("sql_colums")
    sql_whereBy = request.Item("sql_whereBy")
    sql_orderBy = request.Item("sql_orderBy")

    Sql="select "&sql_top&" "&sql_colums&" from "&sql_class&" where 1=1 "&sql_whereBy&" "&sql_orderBy
%>

<%
    Set Rs = Server.CreateObject("ADODB.Recordset")      
    Rs.Open sql,conn,1,3 
    jsonStr = ""
    rows = ""

    Dim i,json_rows,json_ret,arr_rows
    Dim myArray()
    Redim myArray(rs.recordcount-1) '将数组大小重新定义为20
    Set jsonObj=New json
    jsonObj.toResponse=False
    Set json_ret = server.createobject("scripting.dictionary")        
    For i=0 To rs.recordcount-1
        Set myArray(i) = server.createobject("scripting.dictionary")
        For Each e In rs.Fields                
                'rows = rows &""""& e.Name & """:""" & replace(e.value,chr(34),"@_'_@") & """," 
                myArray(i).Add e.Name,e.value  '将key/value加到行数组对象中
        Next   
        Rs.movenext
    Next       
    json_ret.Add "total",rs.recordcount
    json_ret.Add "rows",myArray 
    jsonStr = jsonObj.toJSON(Empty,json_ret,False)

    response.Write jsonStr

%>

上面的代码是将数据库中的数据取出来并将数据保存为json对象,这里面用到了  dictionary ,目前还没有别的办法生成多层级的json数据,只能用它来生成了。 有人说我可以将数据库的数据取出来然后拼接成json数据格式。 对,没错,我也尝试过,但是你会发现,它生成的永远都是string字符串,不是对象,异步获取json格式或者将这个数据传给一些插件的时候你会发现你怎么也得不到想要的结果,原因就在于格式不正确,你得到的是json string,不是json object。 那又有人说了,我可以在异步获取到这个json string之后再将该数据用eval方法转成json对象,对,没错,是可以。 弊端是有的,而且你会发现很头疼的。 这个问题在稍后的文章里面我会再来解释。


4.接下来我们要做的就是将生成的json对象数据异步获取并显示到前台的dom中,看一下demo:

文件名 ajaxShow.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalabel=no" />
    <meta name="renderer" content="webkit" />
    <script type="text/javascript" src="js/json2.js"></script>
    <script type="text/javascript" src="js/jquery.js"></script>
    <style type="text/css">
        body
        {
            min-width: 1020px;
            font-size: 14px;
            background: #fff;
            font-family: "微软雅黑" ,Microsoft Yahei;
            background: #000;
            padding:20px;
            margin:20px;
        }
        .tips
        {
            margin:20px;
            width: 50%;
            height: auto;
            margin: 10px auto;
            border: 1px solid #fff;
            padding: 20px 5px;
            font-size: 16px;
            color: #fefefe;
            background: rbga(220,220,220,0.8);
            word-wrap:break-word;
        }
        .text-center{ text-align:center}
        .min-height{ min-height:300px; }
        .radius
        {            
            border-radius:5px;
            }
        .font-blue
        {
            color: #034C9A;
        }
    </style>
    <script type="text/javascript">
        var url = "http://localhost:701/index_json.asp"
        var relations = {
            sql_class: "Web_News", //表名
            sql_top: "",  //取数据总条数 top 10
            sql_colums: "News_ID,NewsType_id", //列名,用","隔开,如果全部获取,则填写"*" 
            sql_whereBy: "and NewsType_id=78",
            sql_orderBy: "order by News_ID asc"
        }
        $.post(
            url,
	    relations,
            function (data) {
                $('#ajax_data').html(JSON.stringify(data));
                var total = data.total;
                //$('#ajax_data').html(total);
            }
        , "json"
        );

            function strToJson(str) {
                var json = eval('(' + str + ')');
                return json;
            } 
    </script>
</head>
<body>
    
    <div id="header" class="tips radius text-center">
        <b>asp生成json对象并异步获取json对象数据 实例</b>
    </div>
    <div id="Div1" class="tips radius">
        以下将显示异步获取的内容:
    </div>
    <div id="ajax_data" class="tips radius min-height">
    </div>
</body>
</html>
文件的引用和css我就不说了。关键在于ajax部分,这里我用的是jquery中的$.post()方法,有2出关键点: 第一, url ,相信这个大家都会写对吧,就是你请求的数据源页面,我们的例子中为刚才我们建立的 ajax_index.asp; 第二, 'json',这个参数大家可以查一下jquery关于ajax异步获取部分的手册。该参数就是为了保证生成的数据为json对象。

其中你会发现

JSON.stringify(data)
这个就是json2.js  json类文件中的方法,该方法就是将json对象转为string类型,以便将结果显示到dom里面。 运行一下http://localhost:701/ajaxShow.html,是不是已经得到了我们想要的数据。

这是我们全部的数据,当然我们怎么知道我们获取的是json对象呢,只需要试试data.total能不能获取到就知道了啦;我们改一下$.post()中的代码:

//$('#ajax_data').html(JSON.stringify(data));
                var total = data.total;
                $('#ajax_data').html(total);
在刷新一下看看,是不是得到了 17;


哈哈,果然是得到啦  !  好了,该介绍的就介绍完了,关于问什么不用拼接的方法得到json格式的字符串,期待下一篇文章。

源码下载

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Asp 这个老古懂估计没几个人在用了。几年没写代码了,最近要弄个小东西,给手机端提供json数据,不想麻烦别人,自己又只会asp,没办法就自己动手了。网上找了好久都没有一个人能完整的把asp操作json说清楚。最后还是自己搞定的。整出来共享给大家。(ps,还有个原因csdn的分不够用啦,大家看着给点吧。写这个说明文档都用了我两小时。^_^) 以下是示例代码 '说明:json.asp中引用了json.js.asp '其他见文档 '手机很多时候不认gb2312,跳入json的坑就忘记gb2312吧,讨厌的是,如果代码报错,iis会输出gb2312,结果就是乱码,有点烦。 '自己想办法解决吧 response.Charset= "utf-8" dim strJsonData,ovbJson,j dim arrTemp,varname ,i set ovbJson=new vbJson 'asp recrodset和数组转json字符 arrTemp=array("a","{""oa"":""我是oa""}","c") strJsonData=ovbjson.toJson(empty,arrTemp,true) '转换为Json格式的字符串,有兴趣可以自己输出看看是什么 set j=json.parse(strJsonData) '序列化为json对象(或者是数组对象) response.Write(j.get(1)&"") '别用vb数组来存json对象,不然得每个元素去重新序列化,这里如果想j.get(1).oa就不行了。必须对j.get(1)单独序列才行 '----recrodset就不演示了,懒得连数据库 '---自定义操作方法的演示--- strJsonData="{a:1,b:[{c:'我是数组中的点c'}]}" set j=json.parsestr(strJsonData) response.Write(j.b.get(0).c&"") '添加节点的时候注意,如果值是null,会被忽然,这个节点会不存在的。在添加之前记得先检查值 set j=json.add(j,"new","我是新加的节点") response.Write(j.new&"") '下面这句注掉了,是因为这个操作是无效的因为j.b是数组,不能add 'set j=json.add(j.b,"new1","我是加不进的节点") set j.b=j.b.put(j.b.length,j.b.get(0)) response.Write(j.b.get(1).c&",我是新加的数组元素") '因为数组的get方法不允许被赋值,所以不能像下面这样写 'set j.b.get(0)=json.add(j.b.get(0),"new","我会报错") json.add j.b.get(0),"new","我是新加的new我不会报错" json.add j.b.get(0),"new1","我是通过变量取出来的哦" response.Write(j.b.get(0).new&"") varname="new1" response.Write(json.byname(j.b.get(0),varname)&"") for i=0 to j.b.length-1 varname="c" response.Write(json.byname(j.b.get(i),varname)&"我是循环出来的c,索引:"&i&" ") next '最后完整的输出给手机就这样: response.Write json.stringify(j)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值