JSON2.asp
реализация не имеет «Загрузить из базы данных» функция, которая означает, что вы должны сделать что-то, чтобы преобразовать ADODB.Recordset
в структуру JSON самостоятельно.
Если вы готовы использовать другой сценарий есть реализация по RCDMK на GitHub, что действительно есть метод LoadRecordset()
, это называется JSON object class 3.5.3.
Это делает загрузку данных с ADODB.Recordset
очень простой.
<!-- #include virtual="/jsonObject.class.asp" -->
<%
Response.LCID = 2057
'...
Dim rs: Set rs = conn.execute(strQuery)
Dim JSON: Set JSON = New JSONobject
Call JSON.LoadRecordset(rs)
Call Response.Clear()
Response.ContentType = "application/json"
Call JSON.Write()
%>
Код был протестирован с использованием отключенных записей, то ...
здесь обозначает ВОЗЛАГАЮТСЯ код для установки вашего набора записей, соединение и т.д.
Стоит отметить, вы могли бы написать это самостоятельно, это не огромное перепрыгнуть через цикл ADODB.Recordset
и построить строку JSON. Однако я бы возражал по нескольким причинам;
- Это трудоемкое занятие.
- Очень легко пропустить что-то (например, проверка числовых типов данных при генерации вывода).
- В зависимости от того, как это кодируется, может быть неудобно поддерживать (Например, если не вводить имена свойств непосредственно из набора записей и вместо этого выбирать их «жестко»).
- Почему reinvent the wheel? В дикой природе существует множество публичных реализаций, которые затрагивают вопросы, поднятые здесь. По общему признанию, некоторые из них лучше других, но для их включения требуется пять минут и попробовать.
Просто для полноты здесь мой локальный код теста с использованием несвязанных набора записей
<!-- #include virtual="/jsonObject.class.asp" -->
<%
Call init()
Sub init()
Dim fields: fields = Array(Array("title", adVarChar, 50), Array("firstname", adVarChar, 50), Array("lastname", adVarChar, 50), Array("age", adInteger, 4))
Dim rs: Set rs = Server.CreateObject("ADODB.Recordset")
Call InsertRow(rs, fields, Array("Mr", "Joe", "Bloggs", 31))
Call InsertRow(rs, fields, Array("Mr", "John", "Smith", 42))
Response.LCID = 2057
Dim JSON: Set JSON = New JSONobject
Call JSON.LoadRecordset(rs)
Call Response.Clear()
Response.ContentType = "application/json"
Call JSON.Write()
End Sub
Sub InsertRow(ByVal rs, fields, values)
With rs
If rs.State <> adStateOpen Then
For Each fld In fields
Call .Fields.Append(fld(0), fld(1), fld(2))
Next
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
Call .Open()
End If
Call .AddNew()
For i = 0 To UBound(fields, 1)
.Fields(fields(i)(0)).Value = values(i)
Next
Call .Update()
Call .MoveFirst()
End With
End Sub
%>
Выхода:
{"data":[{"title":"Mr","firstname":"Joe","lastname":"Bloggs","age":31},{"title":"Mr","firstname":"John","lastname":"Smith","age":42}]}
Не могли бы вы показать пример фактического редактирования набора записей перед вызовом 'JSON.Write()'? Я не могу понять, как пропустить JSON и удалить/добавить поля в каждую строку. Документация не показывает пример этого, фактически просматривая результат «LoadRecordset». – tylerl
Извините @tylerl, предположил, что вы уже знали, как работать с 'ADODB.Recordset', чтобы добавлять, обновлять и т. Д. В примере, который я привел в своем тестовом примере, был использован« отключенный набор записей », который не сильно отличается, но позволяет мне загружать образцы данных в качестве теста. Я предположил, что вы будете возвращать данные, уже сохраненные в базе данных, готовой для вывода в JSON. – Lankymart
Так это не будет работать, если Recordset уже точно так, как я хочу, когда он приходит из БД? – tylerl