Проблема в том, что двойные кавычки фактически интерпретируются Python, но не так, как вы ожидали:
>>> testline = "{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}"
>>> testline
'{key1: value1, key2: {value2-subkey1: value2-subvalue2}}'
Это потому, что в Python, как и в C, несколько строковых литералов, следующих друг за другом,интерпретируется как одна большая строка, поэтому "abc""def" == "abcdef"
.
Если вы правильно определите testdata
, ваше решение будет работать:
>>> testline = '{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}'
>>> literal_eval(testline.replace('""', '"'))
{'key2': {'value2-subkey1': 'value2-subvalue2'}, 'key1': 'value1'}
Или, если первая и последняя кавычки фактически являются частью строки:
>>> testline = '"{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}"'
>>> literal_eval(testline[1:-1].replace('""', '"'))
{'key2': {'value2-subkey1': 'value2-subvalue2'}, 'key1': 'value1'}