Autor Tema: Reemplazar comillas dobles dentro de comillas dobles.  (Leído 8327 veces)

0 Usuarios y 1 Visitante están viendo este tema.

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Reemplazar comillas dobles dentro de comillas dobles.
« 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:

Citar
{"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.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #1 en: Agosto 19, 2012, 10:19:11 pm »
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.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #2 en: Agosto 19, 2012, 10:42:43 pm »
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 :|

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #3 en: Agosto 20, 2012, 12:18:34 am »
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:

Citar
{"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.


LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #4 en: Agosto 20, 2012, 06:29:40 am »
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

Código: (VB) [Seleccionar]
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
« última modificación: Agosto 20, 2012, 07:02:20 am por LeandroA »

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #5 en: Agosto 20, 2012, 09:40:00 pm »
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

Código: (VB) [Seleccionar]
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.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #6 en: Agosto 21, 2012, 10:31:08 am »
Llegue tarde, pare que esta resuelto, cualquier cosa avisa.

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #7 en: Agosto 21, 2012, 05:20:29 pm »
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

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #8 en: Agosto 21, 2012, 11:03:26 pm »
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.

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Reemplazar comillas dobles dentro de comillas dobles.
« Respuesta #9 en: Agosto 26, 2012, 01:52:37 am »
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.