1、json官网下载了ASP专用的json.asp,代码如下
<% '********************************************************************************************** '* GAB_LIBRARY Copyright (C) 2003 - This file is part of GAB_LIBRARY '* For license refer to the license.txt '*********************************************************************************************** '**************************************************************************************** '' @CLASSTITLE: JSON '' @CREATOR: Michal Gabrukiewicz (gabru at grafix.at), Michael Rebec '' @CONTRIBUTORS: - Cliff Pruitt (opensource at crayoncowboy.com) '' - Sylvain Lafontaine '' @CREATEDON: 2007-04-26 12:46 '' @CDESCRIPTION: Comes up with functionality for JSON (http://json.org) to use within ASP. '' Correct escaping of characters, generating JSON Grammer out of ASP datatypes and structures '' @REQUIRES: - '' @OPTIONEXPLICIT: yes '' @VERSION: 1.4 '**************************************************************************************** class JSON 'private members private output, innerCall 'public members public toResponse ''[bool] should generated results be directly written to the response? default = false '********************************************************************************* '* constructor '********************************************************************************* public sub class_initialize() newGeneration() toResponse = false end sub '****************************************************************************************** '' @SDESCRIPTION: STATIC! takes a given string and makes it JSON valid '' @DESCRIPTION: all characters which needs to be escaped are beeing replaced by their '' unicode representation according to the '' RFC4627#2.5 - http://www.ietf.org/rfc/rfc4627.txt?number=4627 '' @PARAM: val [string]: value which should be escaped '' @RETURN: [string] JSON valid string '' asc 函数被替换成ascw函数以便支持中文 '****************************************************************************************** public function escape(val) dim cDoubleQuote, cRevSolidus, cSolidus cDoubleQuote = &h22 cRevSolidus = &h5C cSolidus = &h2F dim i, currentDigit for i = 1 to (len(val)) currentDigit = mid(val, i, 1) if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then currentDigit = escapequence(currentDigit) elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then currentDigit = "\u00" + right(padLeft(hex(asc(currentDigit) - &hC200), 2, 0), 2) elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2) else select case ascw(currentDigit) case cDoubleQuote: currentDigit = escapequence(currentDigit) case cRevSolidus: currentDigit = escapequence(currentDigit) case cSolidus: currentDigit = escapequence(currentDigit) end select end if escape = escape & currentDigit next end function '****************************************************************************** '' @SDESCRIPTION: generates a representation of a name value pair in JSON grammer '' @DESCRIPTION: the generation is done fully recursive so the value can be a complex datatype as well. e.g. '' toJSON("n", array(array(), 2, true), false) or toJSON("n", array(RS, dict, false), false), etc. '' @PARAM: name [string]: name of the value (accessible with javascript afterwards). leave empty to get just the value '' @PARAM: val [variant], [int], [float], [array], [object], [dictionary], [recordset]: value which needs '' to be generated. Conversation of the data types (ASP datatype -> Javascript datatype): '' NOTHING, NULL -> null, ARRAY -> array, BOOL -> bool, OBJECT -> name of the type, '' MULTIDIMENSIONAL ARRAY -> generates a 1 dimensional array (flat) with all values of the multidim array '' DICTIONARY -> valuepairs. each key is accessible as property afterwards '' RECORDSET -> array where each row of the recordset represents a field in the array. '' fields have properties named after the column names of the recordset (LOWERCASED!) '' e.g. generate(RS) can be used afterwards r[0].ID '' INT, FLOAT -> number '' OBJECT with reflect() method -> returned as object which can be used within JavaScript '' @PARAM: nested [bool]: is the value pair already nested within another? if yes then the {} are left out. '' @RETURN: [string] returns a JSON representation of the given name value pair '' (if toResponse is on then the return is written directly to the response and nothing is returned) '******************************************************************************************* public function toJSON(name, val, nested) if not nested and not isEmpty(name) then write("{") if not isEmpty(name) then write("""" & escape(name) & """: ") generateValue(val) if not nested and not isEmpty(name) then write("}") toJSON = output if innerCall = 0 then newGeneration() end function '********************************************************************************* '* generate '****************************************************************************** private function generateValue(val) if isNull(val) then write("null") elseif isArray(val) then generateArray(val) elseif isObject(val) then if val is nothing then write("null") elseif typename(val) = "Dictionary" then generateDictionary(val) elseif typename(val) = "Recordset" then generateRecordset(val) else generateObject(val) end if else 'bool varTyp = varType(val) if varTyp = 11 then if val then write("true") else write("false") 'int, long, byte elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then write(cLng(val)) 'single, double, currency elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then write(replace(cDbl(val), ",", ".")) else write("""" & escape(val & "") & """") end if end if generateValue = output end function '***************************************************************************** '* generateArray '***************************************************************************** private sub generateArray(val) dim item, i write("[") i = 0 'the for each allows us to support also multi dimensional arrays for each item in val if i > 0 then write(",") generateValue(item) i = i + 1 next write("]") end sub '********************************************************************************* '* generateDictionary '************************************************************************** private sub generateDictionary(val) dim keys, i innerCall = innerCall + 1 write("{") keys = val.keys for i = 0 to uBound(keys) if i > 0 then write(",") toJSON keys(i), val(keys(i)), true next write("}") innerCall = innerCall - 1 end sub '******************************************************************* '* generateRecordset '******************************************************************* private sub generateRecordset(val) dim i write("[") while not val.eof innerCall = innerCall + 1 write("{") for i = 0 to val.fields.count - 1 if i > 0 then write(",") toJSON lCase(val.fields(i).name), val.fields(i).value, true next write("}") val.movenext() if not val.eof then write(",") innerCall = innerCall - 1 wend write("]") end sub '******************************************************************************* '* generateObject '******************************************************************************* private sub generateObject(val) dim props on error resume next set props = val.reflect() if err = 0 then on error goto 0 innerCall = innerCall + 1 toJSON empty, props, true innerCall = innerCall - 1 else on error goto 0 write("""" & escape(typename(val)) & """") end if end sub '******************************************************************************* '* newGeneration '******************************************************************************* private sub newGeneration() output = empty innerCall = 0 end sub '******************************************************************************* '* JsonEscapeSquence '******************************************************************************* private function escapequence(digit) escapequence = "\u00" + right(padLeft(hex(asc(digit)), 2, 0), 2) end function '***************************************************************************** '* padLeft '***************************************************************************** private function padLeft(value, totalLength, paddingChar) padLeft = right(clone(paddingChar, totalLength) & value, totalLength) end function '***************************************************************************** '* clone '****************************************************************************************** public function clone(byVal str, n) dim i for i = 1 to n : clone = clone & str : next end function '****************************************************************************************** '* write '****************************************************************************************** private sub write(val) if toResponse then response.write(val) else output = output & val end if end sub end class %>
2、集成了一个Function.asp,生成token,根据token生成订单、更新订单,记录日志,日志每天生成1个文本文件。
<!-- #include file = "json.asp" --> <% Function newtoken() dim HttpReq,jsonObj,json_ret,PostData,strXML,jsonstr set HttpReq = server.CreateObject("Msxml2.ServerXMLHTTP") url="接口网址" set jsonObj = new json jsonObj.toResponse = false Set json_ret = server.createobject("scripting.dictionary") json_ret.Add "参数名","参数值" json_ret.Add "参数名","参数值" PostData = jsonObj.toJSON(Empty,json_ret,False) HttpReq.open "POST",url,False HttpReq.setRequestHeader "Content-Type","application/json" HttpReq.send PostData strXML = HttpReq.responseText Set jsonstr = parseJSON(strXML) if jsonstr.statusCode=200 then Session("newtoken")=jsonstr.data else response.write "当前可能连接不上,清稍后再试!" end if end Function Function neworder(projectCode,plannedNum,planStartTime,planEndTime) if Session("newtoken")="" THEN newtoken() else dim HttpReq,jsonObj,json_ret,PostData,strXML,jsonstr set HttpReq = server.CreateObject("Msxml2.ServerXMLHTTP") url="接口网址" set jsonObj = new json jsonObj.toResponse = false Set json_ret = server.createobject("scripting.dictionary") json_ret.Add "projectCode",projectCode json_ret.Add "productCode","001" json_ret.Add "plannedNum",plannedNum json_ret.Add "planStartTime",planStartTime json_ret.Add "planEndTime",planEndTime PostData = jsonObj.toJSON(Empty,json_ret,False) HttpReq.open "POST",url,False HttpReq.setRequestHeader "X-AUTH",Session("newtoken") HttpReq.setRequestHeader "Content-Type","application/json" HttpReq.send PostData strXML = HttpReq.responseText Set jsonstr = parseJSON(strXML) if jsonstr.code="200" then dolog "neworder成功-"&projectCode response.write "成功!" else newtoken() dolog "neworder失败-"&projectCode&"-错误号:"& jsonstr.code response.write "出错了!错误号:"& jsonstr.code end if end if End Function Function uporder(projectCode,plannedNum,planStartTime,planEndTime) if Session("newtoken")="" THEN newtoken() else dim HttpReq,jsonObj,json_ret,PostData,strXML,jsonstr set HttpReq = server.CreateObject("Msxml2.ServerXMLHTTP") url="接口网址" set jsonObj = new json jsonObj.toResponse = false Set json_ret = server.createobject("scripting.dictionary") json_ret.Add "projectCode",projectCode json_ret.Add "productCode","001" json_ret.Add "plannedNum",plannedNum json_ret.Add "planStartTime",planStartTime json_ret.Add "planEndTime",planEndTime PostData = jsonObj.toJSON(Empty,json_ret,False) HttpReq.open "POST",url,False HttpReq.setRequestHeader "X-AUTH",Session("newtoken") HttpReq.setRequestHeader "Content-Type","application/json" HttpReq.send PostData strXML = HttpReq.responseText response.write strXML Set jsonstr = parseJSON(strXML) if jsonstr.code="200" then dolog "uporder成功-"&projectCode response.write "成功!" else newtoken() dolog "uporder失败-"&projectCode&"-错误号:"& jsonstr.code response.write "出错了!错误号:"&jsonstr.code end if end if End Function Function dolog(str) aaa=right(year(now()),2)&"."&month(now())&"."&day(now()) way=server.MapPath ("/")&"\log\"&aaa&".txt" Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile(way, 8, True) f.WriteLine(aaa&"-"&str) f.Close End Function Dim scriptCtrl Function parseJSON(str) If Not IsObject(scriptCtrl) Then Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl") scriptCtrl.Language = "JScript" scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;" End If scriptCtrl.ExecuteStatement "result = " & str & ";" Set parseJSON = scriptCtrl.CodeObject.result End Function %>
3、业务里的调用
<!-- #include file = "Function.asp" --> <% '调用newtoken方法 newtoken() '调用neworder方法 neworder var3,var4,var5,var6 '调用uporder方法 uporder var3,var4,var5,var6 %>
来源:https://blog.csdn.net/yftyzs/article/details/129351025