example classic asp json vbscript asp-classic

json asp classic example



Salida ADODB.RecordSet como JSON (3)

Intento cambiar mi aplicación para que emita JSON en lugar de HTML cuando realiza una solicitud de AJAX para algunos datos. Tengo un RecordSet de ADODB. Necesito recorrerlo fila por fila y agregar / cambiar / eliminar diferentes valores. Entonces necesito tomar todas las filas modificadas y response.write como JSON. Estoy usando JSON2.asp, por lo que mi aplicación ya es compatible con JSON.parse y JSON.stringify pero no puedo hacer que JSON.stringify matriz multidimensional como JSON.

set rs = conn.execute(strQuery) if Not rs.EOF Then rsArray = rs.GetRows() ''This pulls in all the results of the RecordSet as a 2-dimensional array columnCount = ubound(rsArray,1) rowCount = ubound(rsArray,2) For rowIndex = 0 to rowCount ''Loop through rows as the outer loop rsArray(3,0) = "somethingelse" Next ''Move on to next row if there is one response.write JSON.stringify(rsArray) & " _______ " End If

Solo necesito poder revisar los resultados de mi consulta de base de datos, modificar los resultados y luego generar los resultados modificados en formato JSON. ¿Cuál es la forma correcta de hacer esto?


intente configurar content-type a "application / json" en la parte superior de su página asp.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Option Explicit Response.Buffer=True Response.ContentType="application/json" Response.Charset="utf-8" '''' rest of your code.. your db operations '''' response write your json %>


Aqui tienes. Esto funciona para mí

set rs = conn.execute(strQuery) c=0 Response.write "[" Do Until rs.eof ''Assign variables here with whatever you need to change title = rs(0) fName = rs(1) lName = rs(2) empID = rs(3) With Response if c > 0 then .write ", " .write "{" & chr(34) & "Title" & chr(34) & " : " & chr(34) & title & chr(34) & ", " & chr(34) & "FirstName" & chr(34) & " : " & chr(34) & fName & chr(34) & ", " .write chr(34) & "LastName" & chr(34) & " : " & chr(34) & lName & chr(34) & ", " & chr(34) & "EmpID" & chr(34) & " : " & chr(34) & empID & chr(34) & "}" End With c = c + 1 rs.MoveNext Loop Response.write "]"

Esto escribirá su objeto JSON directamente en la página.


La implementación JSON2.asp no tiene una función "Cargar desde la base de datos", lo que significa que tendrá que implementar algo para convertir el ADODB.Recordset a una estructura JSON usted mismo.

Si está dispuesto a utilizar un script diferente, hay una implementación de RCDMK en GitHub que tiene un método LoadRecordset() , se llama clase de objeto JSON 3.5.3 .

Esto hace que cargar datos de un ADODB.Recordset realmente sencillo.

<!-- #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() %>

El código ha sido probado usando un conjunto de registros desconectado, el ... aquí denota el código supuesto para configurar su recordset, conexión, etc.

Vale la pena señalar que podría escribir esto usted mismo, no es un gran paso recorrer un ADODB.Recordset y construir una cadena JSON. Sin embargo, discutiría en contra por algunas razones;

  1. Es un ejercicio que consume mucho tiempo.
  2. Muy fácil perder algo (como buscar tipos de datos numéricos, al generar resultados) .
  3. Dependiendo de cómo se codifique puede hacer que sea difícil de mantener (por ejemplo, si no se inyecta nombres de propiedad directamente desde el conjunto de registros y se elige "codificarlos" en su lugar) .
  4. ¿Por qué reinventar la rueda ? Hay muchas implementaciones públicas en la naturaleza que se ocupan de los problemas planteados aquí. Es cierto que algunos son mejores que otros, pero se necesitan cinco minutos para incluirlos y probarlo.

Para completar, aquí está mi código de prueba local utilizando un conjunto de registros desconectado

<!-- #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 %>

Salida:

{"data":[{"title":"Mr","firstname":"Joe","lastname":"Bloggs","age":31},{"title":"Mr","firstname":"John","lastname":"Smith","age":42}]}