json对象for asp

<Script language="VBScript" runat="Server">
'===========================================================
'/ <Assembly>
'/    <Name>Json</Name>
'/     <Version>1.0.11.6</Version>
'/     <Classes>
'/         <Class value="simpleJson">
'/             <Description>操作简单json对象</Description>
'/         </Class>
'/     </Classes>
'/ </Assembly>
'===========================================================
    'json 的 string对象,内部类,用户不必自己操作
    CLASS jsonString
        PRIVATE p_str
        
        PUBLIC SUB Class_Initialize()
            p_str=""
        END SUB
    
        PUBLIC SUB Class_Terminate()
            p_str=NULL
        END SUB
        
        PUBLIC PROPERTY LET v(value)
            p_str=value
        END PROPERTY
        
        PUBLIC PROPERTY GET v
            v=p_str
        END PROPERTY
        
        PUBLIC FUNCTION parseString()
            IF isNull(p_str) THEN
                parseString="null"
            ELSE
                parseString="'"+p_str+"'"    
            END IF
        END FUNCTION
        
    END CLASS
    
    'json 的 Number对象,内部类,用户不必自己操作
    CLASS jsonNumber
        PRIVATE p_number
        
        PUBLIC SUB Class_Initialize()
            p_number=NULL
        END SUB
    
        PUBLIC SUB Class_Terminate()
            p_number=NULL
        END SUB
        
        PUBLIC PROPERTY LET v(value)
            p_number=value
        END PROPERTY
        
        PUBLIC PROPERTY GET v
            v=p_number
        END PROPERTY
        
        PUBLIC FUNCTION parseString()
            IF isNull(p_number) THEN
                parseString="null"
            ELSE
                parseString=Cstr(p_number)
            END IF
        END FUNCTION
    END CLASS
    
    'json 的 value对象,包括自动创建string对象,number对象,true,false,null
    CLASS jsonValue
        PRIVATE p_val
        
        PUBLIC SUB Class_Initialize()
            p_val=NULL
        END SUB
    
        PUBLIC SUB Class_Terminate()
            p_val=NULL
        END SUB
        
        '给value对象赋值,参数可以是string类型,number类型,boolean类型和null,除外,将全部转化为string类型
        PUBLIC PROPERTY LET v(value)
            DIM jStr,jNum
            IF varType(value)=vbBoolean OR varType(value)=vbNull THEN
                p_val=value
            ELSEIF varType(value)=vbString THEN
                SET jStr=NEW jsonString
                jStr.v=value
                SET p_val=jStr
                SET jStr=NOTHING
            ELSEIF isNumeric(value) THEN
                SET jNum=NEW jsonNumber
                jNum.v=value
                SET p_val=jNum
                SET jNum=NOTHING
            ELSE
                SET jStr=NEW jsonString
                jStr.v=Cstr(value)
                SET p_val=jStr
                SET jStr=NOTHING
            END IF
        END PROPERTY
        
        PUBLIC PROPERTY GET v
            IF isObject(p_val) THEN
                SET v=p_val
            ELSE
                v=p_val    
            END IF
        END PROPERTY
        
        '对象以合适的形式转换成字符串表示
        PUBLIC FUNCTION parseString()
            IF isNull(p_val) THEN
                parseString="null"
            ELSEIF varType(p_val)=vbBoolean THEN
                parseString=LCase(Cstr(p_val))
            ELSE
                parseString=p_val.parseString()
            END IF
        END FUNCTION
        
    END CLASS
    
    'json 的 array对象
    CLASS jsonArray
        PRIVATE p_array,p_length
        
        PUBLIC SUB Class_Initialize()
            p_array=Array()
            p_length=0
        END SUB
    
        PUBLIC SUB Class_Terminate()
            p_array=NULL
            p_length=0
        END SUB
        
        '动态设置数组长度
        PUBLIC PROPERTY LET length(value)
            IF value<0 THEN value=0
            p_length=value
            REDIM Preserve p_array(p_length)
        END PROPERTY
        
        '获得数组长度
        PUBLIC PROPERTY GET length()
            length=p_length
        END PROPERTY
        
        '设置索引为index的元素
        PUBLIC PROPERTY LET at(index,ByRef value)
            IF index>=0 OR index<p_length THEN
                SET p_array(index)=value
            END IF
        END PROPERTY        
        
        '获得索引为index的元素,如果index超出范围,返回null
        PUBLIC PROPERTY GET at(index)
            IF index<0 OR index>=p_length THEN
                at=NULL
            ELSE
                SET at=p_array(index)
            END IF
        END PROPERTY
    
        '添加value到数组末尾
        PUBLIC SUB push(ByRef value)
            p_length=p_length+1
            REDIM Preserve p_array(p_length)
            SET p_array(p_length-1)=value
        END SUB
        
        '获得数组末尾元素,并从数组中删除该元素
        PUBLIC FUNCTION pop()
            SET pop=p_array(p_length-1)
            p_length=p_length-1
            REDIM Preserve p_array(p_length)
        END FUNCTION
        
        '添加value到数组头部
        PUBLIC SUB unshift(ByRef value)
            DIM i,jVal
            p_length=p_length+1
            REDIM Preserve p_array(p_length)
            FOR i=p_length-1 TO 1 STEP -1
                SET p_array(i)=p_array(i-1)
            NEXT
            SET p_array(0)=value
        END SUB
        
        '获得数组头部元素,并从数组中删除该元素
        PUBLIC FUNCTION shift()
            DIM i
            SET shift=p_array(0)
            FOR i=0 TO p_length-2
                SET p_array(i)=p_array(i+1)
            NEXT
            p_length=p_length-1
            REDIM Preserve p_array(p_length)
        END FUNCTION
        
        '翻转数组
        PUBLIC SUB reverse()
            DIM i,temp
            FOR i=0 TO Cint((p_length-1)/2)
                SET temp=p_array(i)
                SET p_array(i)=p_array(p_length-1-i)
                SET p_array(p_length-1-i)=temp
                SET temp=NOTHING
            NEXT
        END SUB
        
        '对象以合适的形式转换成字符串表示
        PUBLIC FUNCTION parseString()
            DIM i,str,val
            str="[_VALUES]"
            FOR i=0 TO p_length-1
                val=p_array(i).parseString()
                str=Replace(str,"_VALUES",val+",_VALUES")
            NEXT
            str=Replace(str,",_VALUES","")
            parseString=str
        END FUNCTION
    END CLASS
    
    'json 的 object对象
    CLASS jsonObject
        PRIVATE p_member,p_value,p_length
    
        PUBLIC SUB Class_Initialize()
            p_member=Array()
            p_value=Array()
            p_length=0
        END SUB
    
        PUBLIC SUB Class_Terminate()
            p_member=NULL
            p_value=NULL
            p_length=0
        END SUB
        
        '检查是否包含指定member,返回该member的顺序索引号,没有返回-1
        PRIVATE FUNCTION include(member)
            DIM i
            FOR i=p_length-1 TO 0 STEP -1
                IF p_member(i)=member THEN EXIT FOR
            NEXT
            include=i
        END FUNCTION
        
        '设置member的value对象
        PUBLIC PROPERTY SET member(mem,ByRef value)
            DIM index,length
            index=include(mem)
            IF index=-1 THEN
                p_length=p_length+1
                REDIM Preserve p_member(p_length)
                REDIM Preserve p_value(p_length)
                p_member(p_length-1)=mem
                SET p_value(p_length-1)=value
            ELSE
                SET p_value(index)=value
            END IF
        END PROPERTY
        
        '获得member的value对象
        PUBLIC PROPERTY GET member(mem)
            DIM index
            index=include(mem)
            IF index=-1 THEN
                member=NULL
            ELSE
                SET member=p_value(index)
            END IF
        END PROPERTY
        
        '对象以合适的形式转换成字符串表示
        PUBLIC FUNCTION parseString()
            DIM str,i,mem,val
            str="{_MEMBERS}"
            FOR i=0 TO p_length-1
                mem=p_member(i)
                val=p_value(i).parseString()
                str=Replace(str,"_MEMBERS",mem+":"+val+",_MEMBERS")
            NEXT
            str=Replace(str,",_MEMBERS","")
            parseString=str
        END FUNCTION
    
    END CLASS
    
    '操作简单json for asp的类
    CLASS simpleJson
        PUBLIC SUB Class_Initialize()
        END SUB
    
        PUBLIC SUB Class_Terminate()
        END SUB
        
        '获得 json的object对象新实例
        PUBLIC FUNCTION nO()
            SET nO=NEW jsonObject
        END FUNCTION
        
        '获得 json的array对象新实例
        PUBLIC FUNCTION nA()
            SET nA=NEW jsonArray
        END FUNCTION
        
        '获得 json的value对象新实例
        PUBLIC FUNCTION nV(value)
            DIM jVal
            SET jVal=NEW jsonValue
            jVal.v=value
            SET nV=jVal
        END FUNCTION
        
        '绑定数据数据,转换成简单json对象,第一个参数为recordSet对象实例,第二参数为分页大小,不分页设置为null,第三个参数为页号,不分页设置为null
        PUBLIC FUNCTION DataBind(rs,pageSize,pageNo)
            DIM pageCount,recordCount,field
            DIM jObj,jObj_infos,jArr_rows,jObj_row
            
            IF isNull(pageSize) THEN pageSize=0
            IF isNull(pageNo) THEN pageNo=1
            
            IF NOT isNull(rs) AND NOT isEmpty(rs) THEN
                IF pageSize<>0 THEN
                    rs.pageSize=pageSize
                    rs.absolutePage=pageNo
                    pageCount=rs.pageCount
                END IF
                recordCount=rs.recordCount
                SET jObj=nO()
                SET jObj_infos=nO()
                SET jObj_infos.member("recordCount")=nV(recordCount)
                SET jObj_infos.member("pageSize")=nV(pageSize)
                SET jObj_infos.member("pageNo")=nV(pageNo)
                SET jObj.member("infos")=jObj_infos
                SET jObj_infos=NOTHING
                SET jArr_rows=nA()
                DO UNTIL rs.eof
                    SET jObj_row=nO()
                    FOR EACH field IN rs.fields
                        SET jObj_row.member(field.name)=nV(field.value)
                    NEXT
                    jArr_rows.push(jObj_row)
                    rs.moveNext()
                LOOP
                SET jObj.member("rows")=jArr_rows
                SET jArr_rows=NOTHING
                SET DataBind=jObj
            ELSE
                DataBind=NULL
            END IF
        END FUNCTION
    END CLASS
    
</Script>
<!--例子-->
<%
    DIM sJson,jObj,jObj_name,jArr_interest
    SET sJson=NEW simpleJson
    SET jObj=sJson.nO()
    SET jObj_name=sJson.nO()
    SET jObj_name.member("first")=sJson.nV("Terry")
    SET jObj_name.member("last")=sJson.nV("King")
    SET jObj.member("name")=jObj_name
    SET jObj.member("age")=sJson.nV(22)
    SET jObj.member("marrieged")=sJson.nV(true)
    SET jArr_interest=sJson.nA()
    jArr_interest.push(sJson.nV("basketball"))
    jArr_interest.push(sJson.nV("tv game"))
    jArr_interest.push(sJson.nV("girl"))
    SET jObj.member("interest")=jArr_interest
    Response.Write jObj.parseString()
%>
<%
    DIM r,rs
    '获得记录集rs的操作.....
    SET jObj=NEW simpleJson
    SET r=jObj.DataBind(rs,NULL,NULL)
    Response.Write r.parseString()

%>


人生最精彩的不是实现梦想的瞬间,而是坚持梦想的过程。 胜利不是战胜敌人,而是提高自己。我们只要每天进步百分之一,那就是成功。您如果觉得此分享对你有用,那将是我们天天ASP家园对你成功路上的一点帮助!

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)
### 回答1: ASP是一种服务器端脚本语言,可以用来生成JSON对象。在ASP中,可以使用内置的JSON对象来创建和操作JSON数据。 要生成一个JSON对象,可以首先创建一个空的JSON对象,然后使用Add方法来添加键值对。例如,我们可以创建一个名为person的JSON对象,并向其中添加姓名、年龄和性别等属性: ```asp Dim person Set person = Server.CreateObject("Scripting.Dictionary") person.Add "name", "John" person.Add "age", 25 person.Add "gender", "Male" ``` 上述代码使用了Scripting.Dictionary对象来表示一个JSON对象。可以通过调用Add方法来添加键值对,第一个参数是键名,第二个参数是对应的值。例如,person.Add "name", "John"表示将键名为"name",值为"John"的键值对添加到person对象中。 添加完所有的键值对之后,我们可以使用ASP提供的JSON对象的方法将字典对象转换为JSON格式的字符串。例如,可以使用JSON.stringify方法将person对象转换为JSON字符串: ```asp Dim jsonString jsonString = JSON.stringify(person) ``` 上述代码会将person对象转换为JSON格式的字符串,并将其赋值给jsonString变量。 这样,我们就成功生成了一个JSON对象。需要注意的是,如果要在客户端使用生成的JSON对象,需要将其输出到响应体中。可以使用Response对象的Write方法将JSON字符串输出到浏览器中。 ```asp Response.Write(jsonString) ``` 以上就是使用ASP生成JSON对象的方法。通过创建一个空的JSON对象,并使用Add方法添加键值对,再通过JSON.stringify方法将JSON对象转换为JSON字符串,最后使用Response.Write方法将JSON字符串输出到客户端。 ### 回答2: 在ASP.NET中,我们可以使用JavaScriptSerializer类来生成JSON对象。下面是一个简单的示例: 首先,在ASP.NET页面中引入System.Web.Script.Serialization命名空间。 然后,可以创建一个用于存储数据的数据结构,例如一个类或者一个字典。 接下来,使用JavaScriptSerializer类的Serialize方法将数据结构序列化为JSON字符串,并将其存储在一个变量中。 最后,可以将这个JSON字符串作为响应返回给客户端,或者按照需要进行进一步的处理。 以下是示例代码: ``` // 引入命名空间 using System.Web.Script.Serialization; // 创建数据结构 var data = new { name = "John", age = 28, city = "New York" }; // 序列化为JSON字符串 var json = new JavaScriptSerializer().Serialize(data); // 将JSON字符串作为响应返回给客户端 Response.Write(json); ``` 在这个示例中,我们创建了一个包含名称、年龄和城市信息的匿名对象,并将其序列化为JSON字符串。然后,我们将这个JSON字符串作为响应返回给客户端。 这只是一个简单的示例,你可以根据自己的需求来创建更复杂的数据结构并生成相应的JSON对象。 ### 回答3: ASP是一种服务器端脚本语言,用于构建动态网站和Web应用程序。在ASP中生成JSON对象的方法有很多种,下面介绍一种常用的方法。 首先,在ASP中生成JSON对象需要使用JSON的格式,即使不使用任何外部库也可以手动创建JSON对象。可以使用字典(Dictionary)对象来存储JSON的键值对。 以下是一个示例代码,展示如何在ASP中生成一个包含姓名和年龄的JSON对象: ``` <% ' 创建一个字典对象 Dim jsonObj Set jsonObj = Server.CreateObject("Scripting.Dictionary") ' 添加姓名和年龄键值对 jsonObj.Add "name", "John" jsonObj.Add "age", 25 ' 将字典对象转换为JSON字符串 Dim jsonStr jsonStr = "{" For Each key In jsonObj.Keys jsonStr = jsonStr & """" & key & """" & ":" & """" & jsonObj.Item(key) & """" & "," Next jsonStr = Left(jsonStr, Len(jsonStr) - 1) & "}" ' 输出JSON字符串 Response.Write jsonStr %> ``` 上述代码首先创建了一个字典对象(`jsonObj`),然后通过`Add`方法添加了键值对。接下来,通过一个循环将字典对象中的键和值组合为一个JSON字符串(`jsonStr`)。最后,通过`Response.Write`方法输出JSON字符串。 这样,就使用ASP生成了一个包含姓名和年龄的JSON对象。在实际开发中,可以根据需要添加更多的键值对,构建更复杂的JSON结构。同时,也可以使用第三方库,如JSON.NET等,来简化生成JSON对象的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值