Python: ¿Cómo escapar de la comilla doble dentro del valor de la cadena json?

Tengo problemas para analizar una cadena json en python porque hay comillas dobles adicionales dentro de los valores de la cadena como {"name": "Jack O"Sullivan", "id": "1"}

Estoy tratando de convertirlo en una lista para una evaluación más detallada, así:

 import ast js = '{"name": "Jack O"Sullivan", "id": "1"}' ast.literal_eval(js).values() 

¿Cómo puedo cambiar la cadena json para que sea algo así como "Jack O\'Sullivan" , para que se evalúe correctamente?

Editar Solo para subrayar que sé que el json no es válido, pero esto es lo que tengo y cambiar la fuente NO es una opción. Estoy buscando trabajar alrededor de esta limitación en este momento.

 import re json = '{"name": "Jack O"Sullivan", "id": "1"}' fixed = re.sub(r'("[\s\w]*)"([\s\w]*")',r"\1\'\2", json) 

Sospecho que esto funcionará (ejemplo de trabajo en repl.it ), usa la siguiente expresión regular:

 ("[\s\w]*)"([\s\w]*") 

y luego reemplazar cualquier " interno con \' . Esto funcionará siempre y cuando la lista de inclusión sea válida (la [\s\w] ), es decir, las cadenas válidas solo incluirán espacios y caracteres de palabras. Es posible que tenga que agregar posibilidades adicionales para Nombres más complejos.

Coincide con cualquier cadena """ y luego la reemplaza con "\'" usando grupos de captura y referencias anteriores.

Vea el ejemplo en regex101

Como mencioné en los comentarios, la alternativa es hacer que excluya los caracteres de control json [^{}:,] . Esto debería producir resultados similares, pero no se perderán los nombres con otros caracteres (como, por ejemplo).