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;
- Es un ejercicio que consume mucho tiempo.
- Muy fácil perder algo (como buscar tipos de datos numéricos, al generar resultados) .
- 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) .
- ¿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}]}