<Scriptlanguage="VBScript"runat="Server">
'===========================================================
'/<Assembly>
'/<Name>Json</Name>
'/<Version>1.0.11.6</Version>
'/<Classes>
'/<Classvalue="simpleJson">
'/<Description>操作简单json对象</Description>
'/</Class>
'/</Classes>
'/</Assembly>
'===========================================================
'json的string对象,内部类,用户不必自己操作
CLASSjsonString
PRIVATEp_str
PUBLICSUBClass_Initialize()
p_str=""
ENDSUB
PUBLICSUBClass_Terminate()
p_str=NULL
ENDSUB
PUBLICPROPERTYLETv(value)
p_str=value
ENDPROPERTY
PUBLICPROPERTYGETv
v=p_str
ENDPROPERTY
PUBLICFUNCTIONparseString()
IFisNull(p_str)THEN
parseString="null"
ELSE
parseString="'"+p_str+"'"
ENDIF
ENDFUNCTION
ENDCLASS
'json的Number对象,内部类,用户不必自己操作
CLASSjsonNumber
PRIVATEp_number
PUBLICSUBClass_Initialize()
p_number=NULL
ENDSUB
PUBLICSUBClass_Terminate()
p_number=NULL
ENDSUB
PUBLICPROPERTYLETv(value)
p_number=value
ENDPROPERTY
PUBLICPROPERTYGETv
v=p_number
ENDPROPERTY
PUBLICFUNCTIONparseString()
IFisNull(p_number)THEN
parseString="null"
ELSE
parseString=Cstr(p_number)
ENDIF
ENDFUNCTION
ENDCLASS
'json的value对象,包括自动创建string对象,number对象,true,false,null
CLASSjsonValue
PRIVATEp_val
PUBLICSUBClass_Initialize()
p_val=NULL
ENDSUB
PUBLICSUBClass_Terminate()
p_val=NULL
ENDSUB
'给value对象赋值,参数可以是string类型,number类型,boolean类型和null,除外,将全部转化为string类型
PUBLICPROPERTYLETv(value)
DIMjStr,jNum
IFvarType(value)=vbBooleanORvarType(value)=vbNullTHEN
p_val=value
ELSEIFvarType(value)=vbStringTHEN
SETjStr=NEWjsonString
jStr.v=value
SETp_val=jStr
SETjStr=NOTHING
ELSEIFisNumeric(value)THEN
SETjNum=NEWjsonNumber
jNum.v=value
SETp_val=jNum
SETjNum=NOTHING
ELSE
SETjStr=NEWjsonString
jStr.v=Cstr(value)
SETp_val=jStr
SETjStr=NOTHING
ENDIF
ENDPROPERTY
PUBLICPROPERTYGETv
IFisObject(p_val)THEN
SETv=p_val
ELSE
v=p_val
ENDIF
ENDPROPERTY
'对象以合适的形式转换成字符串表示
PUBLICFUNCTIONparseString()
IFisNull(p_val)THEN
parseString="null"
ELSEIFvarType(p_val)=vbBooleanTHEN
parseString=LCase(Cstr(p_val))
ELSE
parseString=p_val.parseString()
ENDIF
ENDFUNCTION
ENDCLASS
'json的array对象
CLASSjsonArray
PRIVATEp_array,p_length
PUBLICSUBClass_Initialize()
p_array=Array()
p_length=0
ENDSUB
PUBLICSUBClass_Terminate()
p_array=NULL
p_length=0
ENDSUB
'动态设置数组长度
PUBLICPROPERTYLETlength(value)
IFvalue<0THENvalue=0
p_length=value
REDIMPreservep_array(p_length)
ENDPROPERTY
'获得数组长度
PUBLICPROPERTYGETlength()
length=p_length
ENDPROPERTY
'设置索引为index的元素
PUBLICPROPERTYLETat(index,ByRefvalue)
IFindex>=0ORindex<p_lengthTHEN
SETp_array(index)=value
ENDIF
ENDPROPERTY
'获得索引为index的元素,如果index超出范围,返回null
PUBLICPROPERTYGETat(index)
IFindex<0ORindex>=p_lengthTHEN
at=NULL
ELSE
SETat=p_array(index)
ENDIF
ENDPROPERTY
'添加value到数组末尾
PUBLICSUBpush(ByRefvalue)
p_length=p_length+1
REDIMPreservep_array(p_length)
SETp_array(p_length-1)=value
ENDSUB
'获得数组末尾元素,并从数组中删除该元素
PUBLICFUNCTIONpop()
SETpop=p_array(p_length-1)
p_length=p_length-1
REDIMPreservep_array(p_length)
ENDFUNCTION
'添加value到数组头部
PUBLICSUBunshift(ByRefvalue)
DIMi,jVal
p_length=p_length+1
REDIMPreservep_array(p_length)
FORi=p_length-1TO1STEP-1
SETp_array(i)=p_array(i-1)
NEXT
SETp_array(0)=value
ENDSUB
'获得数组头部元素,并从数组中删除该元素
PUBLICFUNCTIONshift()
DIMi
SETshift=p_array(0)
FORi=0TOp_length-2
SETp_array(i)=p_array(i+1)
NEXT
p_length=p_length-1
REDIMPreservep_array(p_length)
ENDFUNCTION
'翻转数组
PUBLICSUBreverse()
DIMi,temp
FORi=0TOCint((p_length-1)/2)
SETtemp=p_array(i)
SETp_array(i)=p_array(p_length-1-i)
SETp_array(p_length-1-i)=temp
SETtemp=NOTHING
NEXT
ENDSUB
'对象以合适的形式转换成字符串表示
PUBLICFUNCTIONparseString()
DIMi,str,val
str="[_VALUES]"
FORi=0TOp_length-1
val=p_array(i).parseString()
str=Replace(str,"_VALUES",val+",_VALUES")
NEXT
str=Replace(str,",_VALUES","")
parseString=str
ENDFUNCTION
ENDCLASS
'json的object对象
CLASSjsonObject
PRIVATEp_member,p_value,p_length
PUBLICSUBClass_Initialize()
p_member=Array()
p_value=Array()
p_length=0
ENDSUB
PUBLICSUBClass_Terminate()
p_member=NULL
p_value=NULL
p_length=0
ENDSUB
'检查是否包含指定member,返回该member的顺序索引号,没有返回-1
PRIVATEFUNCTIONinclude(member)
DIMi
FORi=p_length-1TO0STEP-1
IFp_member(i)=memberTHENEXITFOR
NEXT
include=i
ENDFUNCTION
'设置member的value对象
PUBLICPROPERTYSETmember(mem,ByRefvalue)
DIMindex,length
index=include(mem)
IFindex=-1THEN
p_length=p_length+1
REDIMPreservep_member(p_length)
REDIMPreservep_value(p_length)
p_member(p_length-1)=mem
SETp_value(p_length-1)=value
ELSE
SETp_value(index)=value
ENDIF
ENDPROPERTY
'获得member的value对象
PUBLICPROPERTYGETmember(mem)
DIMindex
index=include(mem)
IFindex=-1THEN
member=NULL
ELSE
SETmember=p_value(index)
ENDIF
ENDPROPERTY
'对象以合适的形式转换成字符串表示
PUBLICFUNCTIONparseString()
DIMstr,i,mem,val
str="{_MEMBERS}"
FORi=0TOp_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
ENDFUNCTION
ENDCLASS
'操作简单jsonforasp的类
CLASSsimpleJson
PUBLICSUBClass_Initialize()
ENDSUB
PUBLICSUBClass_Terminate()
ENDSUB
'获得json的object对象新实例
PUBLICFUNCTIONnO()
SETnO=NEWjsonObject
ENDFUNCTION
'获得json的array对象新实例
PUBLICFUNCTIONnA()
SETnA=NEWjsonArray
ENDFUNCTION
'获得json的value对象新实例
PUBLICFUNCTIONnV(value)
DIMjVal
SETjVal=NEWjsonValue
jVal.v=value
SETnV=jVal
ENDFUNCTION
'绑定数据数据,转换成简单json对象,第一个参数为recordSet对象实例,第二参数为分页大小,不分页设置为null,第三个参数为页号,不分页设置为null
PUBLICFUNCTIONDataBind(rs,pageSize,pageNo)
DIMpageCount,recordCount,field
DIMjObj,jObj_infos,jArr_rows,jObj_row
IFisNull(pageSize)THENpageSize=0
IFisNull(pageNo)THENpageNo=1
IFNOTisNull(rs)ANDNOTisEmpty(rs)THEN
IFpageSize<>0THEN
rs.pageSize=pageSize
rs.absolutePage=pageNo
pageCount=rs.pageCount
ENDIF
recordCount=rs.recordCount
SETjObj=nO()
SETjObj_infos=nO()
SETjObj_infos.member("recordCount")=nV(recordCount)
SETjObj_infos.member("pageSize")=nV(pageSize)
SETjObj_infos.member("pageNo")=nV(pageNo)
SETjObj.member("infos")=jObj_infos
SETjObj_infos=NOTHING
SETjArr_rows=nA()
DOUNTILrs.eof
SETjObj_row=nO()
FOREACHfieldINrs.fields
SETjObj_row.member(field.name)=nV(field.value)
NEXT
jArr_rows.push(jObj_row)
rs.moveNext()
LOOP
SETjObj.member("rows")=jArr_rows
SETjArr_rows=NOTHING
SETDataBind=jObj
ELSE
DataBind=NULL
ENDIF
ENDFUNCTION
ENDCLASS
</Script>
<!--例子-->
<%
DIMsJson,jObj,jObj_name,jArr_interest
SETsJson=NEWsimpleJson
SETjObj=sJson.nO()
SETjObj_name=sJson.nO()
SETjObj_name.member("first")=sJson.nV("Terry")
SETjObj_name.member("last")=sJson.nV("King")
SETjObj.member("name")=jObj_name
SETjObj.member("age")=sJson.nV(22)
SETjObj.member("marrieged")=sJson.nV(true)
SETjArr_interest=sJson.nA()
jArr_interest.push(sJson.nV("basketball"))
jArr_interest.push(sJson.nV("tvgame"))
jArr_interest.push(sJson.nV("girl"))
SETjObj.member("interest")=jArr_interest
Response.WritejObj.parseString()
%>
<%
DIMr,rs
'获得记录集rs的操作.....
SETjObj=NEWsimpleJson
SETr=jObj.DataBind(rs,NULL,NULL)
Response.Writer.parseString()
%>
'===========================================================
'/<Assembly>
'/<Name>Json</Name>
'/<Version>1.0.11.6</Version>
'/<Classes>
'/<Classvalue="simpleJson">
'/<Description>操作简单json对象</Description>
'/</Class>
'/</Classes>
'/</Assembly>
'===========================================================
'json的string对象,内部类,用户不必自己操作
CLASSjsonString
PRIVATEp_str
PUBLICSUBClass_Initialize()
p_str=""
ENDSUB
PUBLICSUBClass_Terminate()
p_str=NULL
ENDSUB
PUBLICPROPERTYLETv(value)
p_str=value
ENDPROPERTY
PUBLICPROPERTYGETv
v=p_str
ENDPROPERTY
PUBLICFUNCTIONparseString()
IFisNull(p_str)THEN
parseString="null"
ELSE
parseString="'"+p_str+"'"
ENDIF
ENDFUNCTION
ENDCLASS
'json的Number对象,内部类,用户不必自己操作
CLASSjsonNumber
PRIVATEp_number
PUBLICSUBClass_Initialize()
p_number=NULL
ENDSUB
PUBLICSUBClass_Terminate()
p_number=NULL
ENDSUB
PUBLICPROPERTYLETv(value)
p_number=value
ENDPROPERTY
PUBLICPROPERTYGETv
v=p_number
ENDPROPERTY
PUBLICFUNCTIONparseString()
IFisNull(p_number)THEN
parseString="null"
ELSE
parseString=Cstr(p_number)
ENDIF
ENDFUNCTION
ENDCLASS
'json的value对象,包括自动创建string对象,number对象,true,false,null
CLASSjsonValue
PRIVATEp_val
PUBLICSUBClass_Initialize()
p_val=NULL
ENDSUB
PUBLICSUBClass_Terminate()
p_val=NULL
ENDSUB
'给value对象赋值,参数可以是string类型,number类型,boolean类型和null,除外,将全部转化为string类型
PUBLICPROPERTYLETv(value)
DIMjStr,jNum
IFvarType(value)=vbBooleanORvarType(value)=vbNullTHEN
p_val=value
ELSEIFvarType(value)=vbStringTHEN
SETjStr=NEWjsonString
jStr.v=value
SETp_val=jStr
SETjStr=NOTHING
ELSEIFisNumeric(value)THEN
SETjNum=NEWjsonNumber
jNum.v=value
SETp_val=jNum
SETjNum=NOTHING
ELSE
SETjStr=NEWjsonString
jStr.v=Cstr(value)
SETp_val=jStr
SETjStr=NOTHING
ENDIF
ENDPROPERTY
PUBLICPROPERTYGETv
IFisObject(p_val)THEN
SETv=p_val
ELSE
v=p_val
ENDIF
ENDPROPERTY
'对象以合适的形式转换成字符串表示
PUBLICFUNCTIONparseString()
IFisNull(p_val)THEN
parseString="null"
ELSEIFvarType(p_val)=vbBooleanTHEN
parseString=LCase(Cstr(p_val))
ELSE
parseString=p_val.parseString()
ENDIF
ENDFUNCTION
ENDCLASS
'json的array对象
CLASSjsonArray
PRIVATEp_array,p_length
PUBLICSUBClass_Initialize()
p_array=Array()
p_length=0
ENDSUB
PUBLICSUBClass_Terminate()
p_array=NULL
p_length=0
ENDSUB
'动态设置数组长度
PUBLICPROPERTYLETlength(value)
IFvalue<0THENvalue=0
p_length=value
REDIMPreservep_array(p_length)
ENDPROPERTY
'获得数组长度
PUBLICPROPERTYGETlength()
length=p_length
ENDPROPERTY
'设置索引为index的元素
PUBLICPROPERTYLETat(index,ByRefvalue)
IFindex>=0ORindex<p_lengthTHEN
SETp_array(index)=value
ENDIF
ENDPROPERTY
'获得索引为index的元素,如果index超出范围,返回null
PUBLICPROPERTYGETat(index)
IFindex<0ORindex>=p_lengthTHEN
at=NULL
ELSE
SETat=p_array(index)
ENDIF
ENDPROPERTY
'添加value到数组末尾
PUBLICSUBpush(ByRefvalue)
p_length=p_length+1
REDIMPreservep_array(p_length)
SETp_array(p_length-1)=value
ENDSUB
'获得数组末尾元素,并从数组中删除该元素
PUBLICFUNCTIONpop()
SETpop=p_array(p_length-1)
p_length=p_length-1
REDIMPreservep_array(p_length)
ENDFUNCTION
'添加value到数组头部
PUBLICSUBunshift(ByRefvalue)
DIMi,jVal
p_length=p_length+1
REDIMPreservep_array(p_length)
FORi=p_length-1TO1STEP-1
SETp_array(i)=p_array(i-1)
NEXT
SETp_array(0)=value
ENDSUB
'获得数组头部元素,并从数组中删除该元素
PUBLICFUNCTIONshift()
DIMi
SETshift=p_array(0)
FORi=0TOp_length-2
SETp_array(i)=p_array(i+1)
NEXT
p_length=p_length-1
REDIMPreservep_array(p_length)
ENDFUNCTION
'翻转数组
PUBLICSUBreverse()
DIMi,temp
FORi=0TOCint((p_length-1)/2)
SETtemp=p_array(i)
SETp_array(i)=p_array(p_length-1-i)
SETp_array(p_length-1-i)=temp
SETtemp=NOTHING
NEXT
ENDSUB
'对象以合适的形式转换成字符串表示
PUBLICFUNCTIONparseString()
DIMi,str,val
str="[_VALUES]"
FORi=0TOp_length-1
val=p_array(i).parseString()
str=Replace(str,"_VALUES",val+",_VALUES")
NEXT
str=Replace(str,",_VALUES","")
parseString=str
ENDFUNCTION
ENDCLASS
'json的object对象
CLASSjsonObject
PRIVATEp_member,p_value,p_length
PUBLICSUBClass_Initialize()
p_member=Array()
p_value=Array()
p_length=0
ENDSUB
PUBLICSUBClass_Terminate()
p_member=NULL
p_value=NULL
p_length=0
ENDSUB
'检查是否包含指定member,返回该member的顺序索引号,没有返回-1
PRIVATEFUNCTIONinclude(member)
DIMi
FORi=p_length-1TO0STEP-1
IFp_member(i)=memberTHENEXITFOR
NEXT
include=i
ENDFUNCTION
'设置member的value对象
PUBLICPROPERTYSETmember(mem,ByRefvalue)
DIMindex,length
index=include(mem)
IFindex=-1THEN
p_length=p_length+1
REDIMPreservep_member(p_length)
REDIMPreservep_value(p_length)
p_member(p_length-1)=mem
SETp_value(p_length-1)=value
ELSE
SETp_value(index)=value
ENDIF
ENDPROPERTY
'获得member的value对象
PUBLICPROPERTYGETmember(mem)
DIMindex
index=include(mem)
IFindex=-1THEN
member=NULL
ELSE
SETmember=p_value(index)
ENDIF
ENDPROPERTY
'对象以合适的形式转换成字符串表示
PUBLICFUNCTIONparseString()
DIMstr,i,mem,val
str="{_MEMBERS}"
FORi=0TOp_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
ENDFUNCTION
ENDCLASS
'操作简单jsonforasp的类
CLASSsimpleJson
PUBLICSUBClass_Initialize()
ENDSUB
PUBLICSUBClass_Terminate()
ENDSUB
'获得json的object对象新实例
PUBLICFUNCTIONnO()
SETnO=NEWjsonObject
ENDFUNCTION
'获得json的array对象新实例
PUBLICFUNCTIONnA()
SETnA=NEWjsonArray
ENDFUNCTION
'获得json的value对象新实例
PUBLICFUNCTIONnV(value)
DIMjVal
SETjVal=NEWjsonValue
jVal.v=value
SETnV=jVal
ENDFUNCTION
'绑定数据数据,转换成简单json对象,第一个参数为recordSet对象实例,第二参数为分页大小,不分页设置为null,第三个参数为页号,不分页设置为null
PUBLICFUNCTIONDataBind(rs,pageSize,pageNo)
DIMpageCount,recordCount,field
DIMjObj,jObj_infos,jArr_rows,jObj_row
IFisNull(pageSize)THENpageSize=0
IFisNull(pageNo)THENpageNo=1
IFNOTisNull(rs)ANDNOTisEmpty(rs)THEN
IFpageSize<>0THEN
rs.pageSize=pageSize
rs.absolutePage=pageNo
pageCount=rs.pageCount
ENDIF
recordCount=rs.recordCount
SETjObj=nO()
SETjObj_infos=nO()
SETjObj_infos.member("recordCount")=nV(recordCount)
SETjObj_infos.member("pageSize")=nV(pageSize)
SETjObj_infos.member("pageNo")=nV(pageNo)
SETjObj.member("infos")=jObj_infos
SETjObj_infos=NOTHING
SETjArr_rows=nA()
DOUNTILrs.eof
SETjObj_row=nO()
FOREACHfieldINrs.fields
SETjObj_row.member(field.name)=nV(field.value)
NEXT
jArr_rows.push(jObj_row)
rs.moveNext()
LOOP
SETjObj.member("rows")=jArr_rows
SETjArr_rows=NOTHING
SETDataBind=jObj
ELSE
DataBind=NULL
ENDIF
ENDFUNCTION
ENDCLASS
</Script>
<!--例子-->
<%
DIMsJson,jObj,jObj_name,jArr_interest
SETsJson=NEWsimpleJson
SETjObj=sJson.nO()
SETjObj_name=sJson.nO()
SETjObj_name.member("first")=sJson.nV("Terry")
SETjObj_name.member("last")=sJson.nV("King")
SETjObj.member("name")=jObj_name
SETjObj.member("age")=sJson.nV(22)
SETjObj.member("marrieged")=sJson.nV(true)
SETjArr_interest=sJson.nA()
jArr_interest.push(sJson.nV("basketball"))
jArr_interest.push(sJson.nV("tvgame"))
jArr_interest.push(sJson.nV("girl"))
SETjObj.member("interest")=jArr_interest
Response.WritejObj.parseString()
%>
<%
DIMr,rs
'获得记录集rs的操作.....
SETjObj=NEWsimpleJson
SETr=jObj.DataBind(rs,NULL,NULL)
Response.Writer.parseString()
%>