Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: seba123neo en 19 Agosto 2012, 09:01 am



Título: Reemplazar comillas dobles dentro de comillas dobles.
Publicado por: seba123neo en 19 Agosto 2012, 09:01 am
Hola, tengo un string de JSON que devuelve mal en realidad y mete una doble comilla dentro de otra doble comilla, lo que quiero es saber como reemplazar la doble comilla, pero sin reemplazar las otras dobles comillas de las otras propiedades, 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"}

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.

creo que la solucion es RegEx, pero no encuentro la misma para hacer esto.

saludos.


Título: Re: Reemplazar comillas dobles dentro de comillas dobles.
Publicado por: Keyen Night en 19 Agosto 2012, 19:29 pm
No es tan prolijo pero así lo resolví :xD

Código
  1.        Dim Texto As String = String.Format("{1}{0}accionObjeto{0}:{0}post{0},{0}accionTipo{0}:{0}comentario{0},{0}ts{0}:{0}02:48:55{0},{0}nick{0}:{0}seba123neo{0},{0}userId{0}:{0}1180918{0},{0}id{0}:15521634,{0}accion_name{0}:{0}Hola{0},{0}url{0}:{0}titulo{0}:{0}Hola como{0} estas{0}{2}", Convert.ToChar(34), "{", "}")
  2.  
  3.        Dim Expresión As Match = Regex.Match(Texto, "\x22[\w\s]+\x22\}$")
  4.  
  5.        Dim Reemplazar As String = Regex.Replace(Expresión.Value, "^\x22", "")
  6.  
  7.        Texto = Texto.Replace(Expresión.Value, Reemplazar)
  8.  
  9.        Console.WriteLine(Texto)
  10.  
  11.        Console.ReadKey()

En la expresión regular \x22[\w\s]+\x22\}$ tienes que reemplazar [\w\s] por, más grupos porque allí solo captura números, letras y espacios en "titulo":.


Título: Re: Reemplazar comillas dobles dentro de comillas dobles.
Publicado por: seba123neo en 22 Agosto 2012, 20:25 pm
Hola, gracias por responder, lo pude solucionar con algo que me paso el usuario LeandroA

Código
  1. Option Explicit
  2.  
  3. Private Sub Command1_Click()
  4.    Debug.Print FixJSON(Text1)
  5. End Sub
  6.  
  7. Private Function FixJSON(ByVal sJSON As String) As String
  8.    Dim sArr() As String
  9.    Dim lPos As Long, i As Long
  10.  
  11.    If Len(sJSON) = 0 Then Exit Function
  12.  
  13.    sArr() = Split(sJSON, ",")
  14.  
  15.    For i = 0 To UBound(sArr)
  16.        Do While UBound(Split(sArr(i), Chr$(34))) > 4
  17.            lPos = InStr(sArr(i), ":")
  18.            lPos = InStr(lPos + 2, sArr(i), Chr$(34))
  19.            sArr(i) = Left$(sArr(i), lPos - 1) & Mid$(sArr(i), lPos + 1)
  20.        Loop
  21.    Next
  22.  
  23.    FixJSON = Join(sArr, ",")
  24. End Function

saludos.