Ver Mensaje Individual
  #108 (permalink)  
Antiguo 09/09/2008, 05:47
tammander
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 10 meses
Puntos: 7
Codificación JSON para asp

Hice esta función para condificar información usando JSON para AJAX. Es similar a la función json_encode de PHP. No esta del todo depurada pero hace su función :P

Se le puede pasar tanto arrays de dos dimensiones que emulen los arrays asociativos de php:

$data["nombre"] = "Antonio" se pasaria asi: data(0,0) = "Nombre", data(0,1) = "Antonio"

Como arrays simples con separacion interna mediante dos puntos (:) :

data(0) = "Nombre: Antonio"

asi como listas

data(0) = Array("Antonio", "Juan", "Pedro")

La forma de usarlo:

response.write(json_encode(data))

Código:
' ***************************
' Codifica para lectura json
' ***************************

' Valores a tener en cuenta de VarType
'vbEmpty 0 Empty (sin inicializar) 
'vbNull 1 Null (datos no válidos) 
'vbInteger 2 Entero 
'vbLong 3 Número entero largo 
'vbSingle 4 Número de punto flotante de precisión simple 
'vbDouble 5 Número de punto flotante de precisión doble 
'vbCurrency 6 Moneda 
'vbDate 7 Fecha 
'vbString 8 Cadena 
'vbObject 9 Objeto de automatización 
'vbError 10 Error 
'vbBoolean 11 Booleano
'vbByte 17 Byte 
'vbArray 8192 o 8204 Matriz 

' Estos dos para TODO 

'vbVariant 12 Variant (usada sólo con matrices de tipo Variant) 
'vbDataObject 13 Un objeto de acceso de datos 

dim pasa 

function json_encode(Arrstr)
    dim n, s, a, campo, valor
    dim tmp, dimen, esLista, final
    
    'on error resume next
    
    final = """"""

    ' Es null
    if (VarType(Arrstr)=1) then 
        final = null
    ' es boolean
    elseif VarType(Arrstr) = 11 then 
        final = false
        if Arrstr = true then final = true
    ' Es array
    elseif VarType(Arrstr) = 8192 or isArray(ArrStr) then
        dimen = 1
        ' Chequeamos las dimensiones del array
        on error resume next
        if ubound(Arrstr,2) > 1 then 
            if err = 0 then dimen = 2
        end if
        on error goto 0
        
        'chequeamos si es un objeto o una lista
        s = ""
        for n = 0 to Ubound(Arrstr, 1)
            
            ' Tomamos el valor de la fila
            ' Es un array multidimensional o simula uno asociativo
            if dimen > 1 then
                campo = json_encode(Arrstr(n,0))
                if Trim(campo) <> "" then
                    valor = json_encode(Arrstr(n,1))
                    s = s & campo & ":" & valor & ","
                end if
                esLista = false
                
            elseif instr(Arrstr(n),":") > 0 then
                tmp = split(a,":")
                campo = json_encode(tmp(0))
                if Trim(campo) <> "" then
                    valor = json_encode(tmp(1))
                    s = s & campo & ":" & valor & ","
                end if
                esLista = false
                
            else ' Es una lista
                if Trim(Arrstr(n)) <> "" then    s = s & json_encode(Arrstr(n)) & ","
                esLista = true
                
            end if
        next    
        if not esLista then final = "{" else final = "[" end if
        if len(s) > 1 then final = final & left(s, len(s)-1)
        if not esLista then final = final & "}" else final = final & "]" end if
    ' Es escalar
    elseif VarType(Arrstr) > 1 and VarType(Arrstr) < 9 then
        valor = Arrstr
        valor = cstr(valor)
        ' Float Type (must be .)
        valor = replace(valor, ",", ".")
        valor = replace(valor, vbCrLf, "\\n")
        valor = replace(valor, vbCr, "\\n")
        valor = replace(valor, vbLf, "\\n")
        valor = replace(valor, "\\", "\\\")
        valor = replace(valor, "/", "\\/")
        valor = replace(valor, "\n", "\\n")
        valor = replace(valor, "\t", "\\t")
        valor = replace(valor, "\r", "\\r")
        valor = replace(valor, "\b", "\\b")
        valor = replace(valor, "\f", "\\f")
        valor = replace(valor, """", "\""")
                
        valor = """" & Trim(valor) & """"

        final = valor
    end if
    'on error goto 0
    json_encode = final
end function
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -