Есть хорошие библиотеки для разбора JSON в классическом ASP? [закрытый]
Я смог найти миллион библиотек для формирование JSON в классическом ASP( VBScript), но я не нашел ни одного для анализ.
Я хочу что-то, что я могу передать строку JSON и получить обратно объект VBScript какого-то вида (массив, сценарии.Словарь и т. д.)
может ли кто-нибудь порекомендовать библиотеку для разбора JSON в классическом ASP?
8 ответов:
имейте в виду, что классический ASP включает в себя JScript, а также VBScript. Интересно, что вы можете анализировать JSON с помощью JScript и использовать полученные объекты непосредственно в VBScript.
поэтому можно использовать канонический https://github.com/douglascrockford/JSON-js/blob/master/json2.js в серверном коде с нулевыми модификациями.
конечно, если ваш JSON содержит какие-либо массивы, они останутся массивами JScript после завершения синтаксического анализа. Вы можете доступ к содержимому массива JScript из VBScript с помощью точечной нотации.
<%@Language="VBScript" %> <% Option Explicit %> <script language="JScript" runat="server" src='path/to/json2.js'></script> <% Dim myJSON myJSON = Request.Form("myJSON") // "[ 1, 2, 3 ]" Set myJSON = JSON.parse(myJSON) // [1,2,3] Response.Write(myJSON) // 1,2,3 Response.Write(myJSON.[0]) // 1 Response.Write(myJSON.[1]) // 2 Response.Write(myJSON.[2]) // 3 %>
Не уверен. Вы проверили ASP extreme фреймворк, который имеет поддержку JSON?
Я не мог заставить работать extreme-evolution или предложение Криса Нильсона. Но, следующее действительно работало для меня:
http://tforster.wik.is/ASP_Classic_Practices_For_The_21st_Century/JSON4ASP
загрузите следующее Как " json2.минута.жерех"
http://tforster.wik.is/@api/deki/files/2/=json2.min.asp
добавьте следующую строку в верхнюю часть файла ASP:
<script language="javascript" runat="server" src="json2.min.asp"></script>
затем вы можете использовать JSON в ASP.
Dim car: Set car = JSON.parse("{""brand"":""subaru"",""model"":""outback sport"",""year"":2003," & _ """colour"":""green"",""accessories"":[" & _ "{""foglamps"":true},{""abs"":true},{""heatedSeats"":true}]}") Response.Write("brand: " & car.brand & "<br/>") Response.Write("model: " & car.model & "<br/>") Response.Write("colour: " & car.colour & "<br/>") Response.Write("has foglamps: " & CStr(car.accessories.get(0).foglamps) & "<br/>") car.accessories.get(0).foglamps = false Response.Write("has foglamps: " & CStr(car.accessories.get(0).foglamps) & "<br/>") Response.Write("new Json: " & JSON.stringify(car) & "<br/>") Set car = Nothing
Примечание: чтобы проанализировать массив элементов, вам нужно сделать следующее:
for each iTmp in testing if (TypeName(iTmp))<>"JScriptTypeInfo" then Response.Write("Item: " & iTmp & "<br/>") end if next
Я недавно реализовал VbsJson класса, который имеет "расшифруйте "метод для разбора JSON на VBScript и a" Encode " метод для генерации JSON из VBScript. Код несколько длинный, поэтому я не вставляю его сюда.
я написал этот ответ, когда искал легкое чистое решение VBScript.
собрав рудиментарный конвертер JSON в XML, мы можем пройти строку JSON и превратить ее в Microsoft.Документ XMLDOM.
оттуда мы используем XML API Microsoft, включая запросы XPath, чтобы вырвать любые значения, которые мы хотели.
Это обрабатывает простой JSON, но я никогда не предназначал этот ответ для чего-то более сложного.
для более надежное решение, лучший интерпретатор JSON, - это правильный движок Javascript. Поэтому я настоятельно рекомендую принятый ответ на этот вопрос, т. е. есть хорошие библиотеки для разбора JSON в классическом ASP?
Function JSONtoXML(jsonText) Dim idx, max, ch, mode, xmldom, xmlelem, xmlchild, name, value Set xmldom = CreateObject("Microsoft.XMLDOM") xmldom.loadXML "<xml/>" Set xmlelem = xmldom.documentElement max = Len(jsonText) mode = 0 name = "" value = "" While idx < max idx = idx + 1 ch = Mid(jsonText, idx, 1) Select Case mode Case 0 ' Wait for Tag Root Select Case ch Case "{" mode = 1 End Select Case 1 ' Wait for Attribute/Tag Name Select Case ch Case """" name = "" mode = 2 Case "{" Set xmlchild = xmldom.createElement("tag") xmlelem.appendChild xmlchild xmlelem.appendchild xmldom.createTextNode(vbCrLf) xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild Set xmlelem = xmlchild Case "[" Set xmlchild = xmldom.createElement("tag") xmlelem.appendChild xmlchild xmlelem.appendchild xmldom.createTextNode(vbCrLf) xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild Set xmlelem = xmlchild Case "}" Set xmlelem = xmlelem.parentNode Case "]" Set xmlelem = xmlelem.parentNode End Select Case 2 ' Get Attribute/Tag Name Select Case ch Case """" mode = 3 Case Else name = name + ch End Select Case 3 ' Wait for colon Select Case ch Case ":" mode = 4 End Select Case 4 ' Wait for Attribute value or Tag contents Select Case ch Case "[" Set xmlchild = xmldom.createElement(name) xmlelem.appendChild xmlchild xmlelem.appendchild xmldom.createTextNode(vbCrLf) xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild Set xmlelem = xmlchild name = "" mode = 1 Case "{" Set xmlchild = xmldom.createElement(name) xmlelem.appendChild xmlchild xmlelem.appendchild xmldom.createTextNode(vbCrLf) xmlelem.insertBefore xmldom.createTextNode(vbCrLf), xmlchild Set xmlelem = xmlchild name = "" mode = 1 Case """" value = "" mode = 5 Case " " Case Chr(9) Case Chr(10) Case Chr(13) Case Else value = ch mode = 7 End Select Case 5 Select Case ch Case """" xmlelem.setAttribute name, value mode = 1 Case "\" mode = 6 Case Else value = value + ch End Select Case 6 value = value + ch mode = 5 Case 7 If Instr("}], " & Chr(9) & vbCr & vbLf, ch) = 0 Then value = value + ch Else xmlelem.setAttribute name, value mode = 1 Select Case ch Case "}" Set xmlelem = xmlelem.parentNode Case "]" Set xmlelem = xmlelem.parentNode End Select End If End Select Wend Set JSONtoXML = xmlDom End Function
приведенный выше скрипт, преобразует следующий JSON:
{ "owningSystemUrl": "http://www.arcgis.com", "authInfo": { "tokenServicesUrl": "https://www.arcgis.com/sharing/rest/generateToken", "isTokenBasedSecurity": true } }
в:
<xml owningSystemUrl="http://www.arcgis.com"> <authInfo tokenServicesUrl="https://www.arcgis.com/sharing/rest/generateToken" isTokenBasedSecurity="true" > </authInfo> </xml>
теперь мы можем использовать XPath для извлечения
tokenServicesUrl
, например:dom.SelectSingleNode("xml/authInfo").getAttribute("tokenServicesUrl") ' Returns: "https://www.arcgis.com/sharing/rest/generateToken"
AXE-отличная библиотека, но довольно тяжелая, если вам просто нужна функциональность обработки JSON.
тем не менее, я захватил базу.файл asp и json.файл класса asp из проекта AXE и успешно использовал их для реализации синтаксического анализа JSON в моем проекте.
для поколения JSON, я нашел aspjson проще было интегрировать. Он также имеет более мощные функции, связанные с json. В документации axe немного не хватает и было больше работы по интеграции в систему проект, однако он отлично справляется с сериализацией своего объекта JSON VB обратно в строку.
решения здесь очень хорошие, но иногда перебор. Если JSON прост и всегда одна и та же структура, вы можете разобрать ее самостоятельно, это быстро и просто.
'read data from client records = Request.Form("records") 'convert the JSON string to an array Set oRegExpre = new RegExp oRegExpre.Global = true oRegExpre.Pattern = "[\[\]\{\}""]+" records = replace(records, "},{","||") records = oRegExpre.Replace(records, "" ) aRecords = split(records,"||") 'iterate the array and do some cleanup for each rec in aRecords aRecord = split(rec,",") id = split(aRecord(1),":")(1) field = split(aRecord(0),":")(0) updateValue = split(aRecord(0),":")(1) updateValue = replace(updateValue,chr(10),"\n") updateValue = replace(updateValue,chr(13),"\r") updateValue = replace(updateValue,"'","''") 'etc next