Reemplazar comillas dobles dentro de comillas dobles.

Iniciado por seba123neo, 19 Agosto 2012, 09:01 AM

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

seba123neo

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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Keyen Night

No es tan prolijo pero así lo resolví :xD

Código (vb.net) [Seleccionar]
        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), "{", "}")

        Dim Expresión As Match = Regex.Match(Texto, "\x22[\w\s]+\x22\}$")

        Dim Reemplazar As String = Regex.Replace(Expresión.Value, "^\x22", "")

        Texto = Texto.Replace(Expresión.Value, Reemplazar)

        Console.WriteLine(Texto)

        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":.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

seba123neo

Hola, gracias por responder, lo pude solucionar con algo que me paso el usuario LeandroA

Código (vbnet) [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


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson