Не уверен, правильно ли я понял ваши требования, но вы ищете что-то подобное?
def fix_json(string_):
if string_[0] == string_[-1] == "'":
return '"' + string_[1:-1] +'"'
return string_
Пример использования:
>>> fix_json("'{'key':'val\"'...cd'}'")
"{'key':'val"'...cd'}"
РЕДАКТИРОВАТЬ: кажется, что юмор, который я пытался сделать в приведенном выше примере, не говорит само за себя. Итак, вот еще один пример:
>>> fix_json("'This string has - I'm sure - single quotes delimiters.'")
"This string has - I'm sure - single quotes delimiters."
Этот пример показывает, как «замена» происходит только на концах строки, а не внутри нее.
Конечно, вы можете добиться того же с помощью регулярного выражения, но если вы просто проверяете начальный и конечный символы строки, я считаю, что использование регулярных строковых индексов более читабельно ...