Любые хорошие библиотеки для разбора JSON в классическом ASP?
Мне удалось найти библиотеки zillion для генерации JSON в классическом ASP (VBScript), но я не нашел ЛЮБОГО для синтаксического анализа .. p >
Мне нужно что-то, что я могу передать строку JSON и вернуть какой-то объект VBScript (Array, Scripting.Dictionary и т.д.)
Может ли кто-нибудь порекомендовать библиотеку для разбора JSON в классическом ASP?
Ответы
Ответ 1
Имейте в виду, что классический 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
%>
Ответ 2
Не уверен в этом. Вы проверили ASP крайней рамки, которая поддерживает JSON?
Ответ 3
Я не мог заставить экстремальную эволюцию или предложение Криса Нильсона работать.
Но для меня работали следующие:
http://tforster.wik.is/ASP_Classic_Practices_For_The_21st_Century/JSON4ASP
Загрузите следующее как "json2.min.asp"
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
Ответ 4
Недавно я реализовал класс VbsJson, который имеет" Decode метод для разбора JSON на VBScript и метод Encode для генерации JSON из VBScript. Код несколько длинный, поэтому я не вставляю его здесь.
Ответ 5
У меня есть функция JSONtoXML VBScript, которая берет строку JSON и возвращает Microsoft.XMLDOM:
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(UCase(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(UCase(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
Ответ 6
http://github.com/nagaozen/asp-xtreme-evolution/
Ответ 7
AX - отличная библиотека, но довольно тяжелая, если вам просто нужны функции обработки JSON.
Я, однако, захватил файл base.asp и файл класса json.asp из проекта AX и успешно использовал их для реализации анализа JSON в моем проекте.
Для генерации JSON я нашел aspjson проще для интеграции. Он также имеет более мощные функции, связанные с json. Документация топора немного не хватает и больше работала для интеграции в проект, однако он отлично справляется с сериализацией объекта JSON VB обратно в строку.
Ответ 8
решения здесь очень хорошие, но иногда избыточные.
Если 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