es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reformatear una cadena para simular un json utilizando regex en Python.

Lo que quiero hacer es básicamente reformatear una cadena para que pase la función de validación de jsonschema.

A simple vista parece sencillo. Sin embargo, la parte complicada es que la cadena se lee desde un archivo y puede variar en su apariencia y formato.

Por ejemplo:

{
key:”value”,

}
O
{
“key”:’value’,

}
O cualquier combinación posible de comillas simples, comillas dobles, sin comillas, arrays, strings, etc. y puede contener una apostrofe, etc.

Quiero ser lo suficientemente permisivo con las reglas de regex y tratar los datos de entrada como no estructurados, formateando el código pasado en tiempo de ejecución de forma uniforme para verificar su calidad.

Hasta ahora, mi enfoque en python ha sido intentar iterar sobre las transformaciones más comunes que quiero realizar. Sin embargo, sé que lo que quiero hacer es alcanzable, probablemente de manera muy obvia, y aunque aún no lo he completado, pensé en intentar salvar el dolor de cabeza y pedir ayuda.

Un ejemplo más completo que tengo se encuentra aquí (he intentado mostrar la mayoría de los problemas que he encontrado hasta ahora):

{
key_a:’my value’,
key_b:”my other value”,
nested_value_a:{
sub_a: “value a”,
‘sub_b’:’value b’,
“sub_c”:’isn\’t value b very interesting’
},
key_c:{
sub_d: [“value”],
sub_e: [“value”]
}
}

Output deseado:

{
“key_a”:”my value”,
“key_b”:”my other value”,
“nested_value_a”:{
“sub_a”: “value a”,
“sub_b”:”value b”,
“sub_c”:”isn’t value b very interesting”
},
“key_c”:{
“sub_d”: [“value”],
“sub_e”: [“value”]
}
}

He intentado esto como mi primer paso – pero estoy convencido de que estoy yendo por el camino difícil. Quería intentar combinar negaciones de adelante y atrás, para poder reemplazar globalmente todas las comillas simples por comillas dobles, evitando las instancias en las que una comilla simple se encuentre entre 2 letras, pero no creo que sea lo suficientemente inteligente como para lograrlo por mi cuenta.

Toda ayuda es muy apreciada.

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Reformatear una cadena para pasar la función de validación de esquema JSON

    El objetivo es reformatear una cadena leída de un archivo para que pase la función de validación de jsonschema. La parte complicada es que la cadena de entrada puede variar en apariencia, formato y contener una variedad de tipos de comillas, apóstrofes y otros caracteres especiales.

    Una muestra de cadena de entrada se ve así:

    {
        key:"value",
        ...
    }
    

    O

    {
        "key":'value'
        ,... 
    }
    

    La tarea consiste en aplicar reglas de expresiones regulares a la cadena de entrada para tratarla como no estructurada, formatearla como código uniforme y legible y convertirla en JSON válido para propósitos de validación.

    Una muestra de salida:

    {
        "key_a":"mi valor",
        "key_b":"mi otro valor"
        ,"nested_value_a":{
            "sub_a": "valor a",
            "sub_b":"valor b",
            "sub_c":"no es muy interesante el valor b"
        }
        ,"key_c":{ 
            "sub_d": ["valor"],
            "sub_e":   ["valor"]
            }
    }
    

    El enfoque consiste en usar Python, iterar sobre las transformaciones más comunes necesarias para procesar la entrada y utilizar reglas de expresiones regulares, incluidas búsquedas y no búsquedas negativas, para intercambiar globalmente todas las comillas simples por comillas dobles, evitando los casos en los que una comilla simple no indica el inicio o el final de una cadena.

Comments are closed.