Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: seba123neo en Agosto 19, 2012, 06:26:55 pm
-
Hola, casi nunca pregunto, pero esta me vencio, les traigo un problemita 8).
tengo un string de JSON que lo extraigo desde una web, (la web devuelve mal a veces en realidad y mete una doble comilla dentro), lo que quiero es saber como reemplazar la doble comilla, pero sin reemplazar las otras dobles comillas de las otras propiedades del JSON sino queda invalido, por ejemplo lo que devuelve es esto:
{"accionObjeto":"post","accionTipo":"comentario","ts":"02:48:55","nick":"seba123neo","userId":"1180918","id":15521634,"accion_name":"Hola","url":"","titulo":"Hola como" estas"}
este JSON (si lo pegan en cualquier JSON Parser de internet te lo da como un JSON valido, salvo por la ultima parte que puse en negrita)
en esa propiedad "titulo", me viene esa doble comilla al lado de la palabra "como".
como ven todo esta bien, solo que esa doble comilla a lo ultimo la necesito reemplazar, pero sin reemplazar las otras, sino el JSON es unutil.
tambien les comento que el string no solo tiene esta linea, sino que me vienen miles iguales, y hay algunas que tienen puesta esa comilla (siempre en esa propiedad titulo).
capas que de las mil lines que vienen, solo 10 contienen esta comilla, pero suficiente para que el parseador lo detecte como un JSON invalido.
creo que la solucion es RegEx, pero no encuentro la misma para hacer esto.
saludos.
-
Podes pegar mas de JSON que tenes, se me ocuren varias ideas pero necesito ver un poco mas de lo que tenes a ver si se puede aplicar.
-
Seria como crear un parser de JSON, yo lo haria con expresionres regulares, si siempre es así. Sino como dice cobein, quizás convendria manejo de strings :|
-
Podes pegar mas de JSON que tenes, se me ocuren varias ideas pero necesito ver un poco mas de lo que tenes a ver si se puede aplicar.
si, supongamos 5 lineas serian asi:
{"accionObjeto":"post","accionTipo":"comentario","ts":"02:48:55","nick":"seba123neo","userId":"1180918","id":15521634,"accion_name":"Hola","url":"","titulo":"Hola como" estas"},{"accionObjeto":"post","accionTipo":"comentario","ts":"02:48:55","nick":"seba123neo","userId":"1180918","id":15521634,"accion_name":"Hola","url":"","titulo":"Hola como estas"},{"accionObjeto":"post","accionTipo":"comentario","ts":"02:48:55","nick":"seba123neo","userId":"1180918","id":15521634,"accion_name":"Hola","url":"","titulo":"Hola como estas"},{"accionObjeto":"post","accionTipo":"comentario","ts":"02:48:55","nick":"seba123neo","userId":"1180918","id":15521634,"accion_name":"Hola","url":"","titulo":"Hola te"ngo un problema estas"},{"accionObjeto":"post","accionTipo":"comentario","ts":"02:48:55","nick":"seba123neo","userId":"1180918","id":15521634,"accion_name":"Hola","url":"","titulo":"Hola como estas"}
la primera y la cuarta linea, tienen puesta una comilla demas para simular el problema.
-
Hola seba la forma mas fácil que se me ocurres es esta, no se si sea la mas veloz o pueda llegar a solucionar mas de un problemas pero almenos este de la " parece que si, y por los visto el titulo es puesto por usuarios que usaron ", asi que creo que te puede llegar a ser util, porque el error no es por el que genera el Json
Option Explicit
Private Sub Command1_Click()
Debug.Print FixJSON(Text1)
End Sub
Private Function FixJSON(ByVal sJSON As String) As String
Dim sArr() As String
Dim lPos As Long, i As Long
If Len(sJSON) = 0 Then Exit Function
sArr() = Split(sJSON, ",")
For i = 0 To UBound(sArr)
Do While UBound(Split(sArr(i), Chr$(34))) > 4
lPos = InStr(sArr(i), ":")
lPos = InStr(lPos + 2, sArr(i), Chr$(34))
sArr(i) = Left$(sArr(i), lPos - 1) & Mid$(sArr(i), lPos + 1)
Loop
Next
FixJSON = Join(sArr, ",")
End Function
-
Hola seba la forma mas fácil que se me ocurres es esta, no se si sea la mas veloz o pueda llegar a solucionar mas de un problemas pero almenos este de la " parece que si, y por los visto el titulo es puesto por usuarios que usaron ", asi que creo que te puede llegar a ser util, porque el error no es por el que genera el Json
Option Explicit
Private Sub Command1_Click()
Debug.Print FixJSON(Text1)
End Sub
Private Function FixJSON(ByVal sJSON As String) As String
Dim sArr() As String
Dim lPos As Long, i As Long
If Len(sJSON) = 0 Then Exit Function
sArr() = Split(sJSON, ",")
For i = 0 To UBound(sArr)
Do While UBound(Split(sArr(i), Chr$(34))) > 4
lPos = InStr(sArr(i), ":")
lPos = InStr(lPos + 2, sArr(i), Chr$(34))
sArr(i) = Left$(sArr(i), lPos - 1) & Mid$(sArr(i), lPos + 1)
Loop
Next
FixJSON = Join(sArr, ",")
End Function
barbaro Leandro, me funciono bien, hasta ahora he probado (me vienen simpre por cada peticion mil lineas) y hasta ahora ninguna tira error, parece que funciona, y es bastante veloz casi ni tarda. +1 gracias !!! despues cuando lo termine lo publico.
saludos.
-
Llegue tarde, pare que esta resuelto, cualquier cosa avisa.
-
Llegue tarde, pare que esta resuelto, cualquier cosa avisa.
gracias, hasta ahora funca todo bien, (y eso que lo estoy haciendo en .NET), el codigo funciona igual, plantie la duda aca en VB6 porque se que van a responder mas que en .NET y aparte el codigo es igual.
para el que le interese, es una boludes la que estoy haciendo, pero interesante de verla, es la pagina de Taringa! en vivo, que muestra todo lo que pasa en la web. cuando lo tenga lo posteo en .NET
Taringa en vivo (http://www.taringa.net/envivo/)
-
Si había visto eso, que groso los cambios que se dan por segundos, y me llamaba la atencion como funcionaba, espero poder ver pronto ese proyecto.
Saludos.
-
Si había visto eso, que groso los cambios que se dan por segundos, y me llamaba la atencion como funcionaba, espero poder ver pronto ese proyecto.
Saludos.
Listo, esta publicado en la seccion de .NET, gracias.