На хосте, у меня есть переменная среды с цитатой знак в значении, что-то вроде:Как расширить переменную окружения в python, избегая специальных символов?
export VALUE_WITH_QUOTE_FROM_OS='quote"value'
и когда я эхо на баш, это прекрасно
#echo $VALUE_WITH_QUOTE_FROM_OS
quote"value
У меня есть следующий JSON строка:
json_str = '{"key":"${VALUE_WITH_QUOTE_FROM_OS}"}'
Тогда я хочу, чтобы расширить переменную среды внутри питона сценария перед дальнейшей обработкой, что-то вроде этого
json_str = os.path.expandvars(json_str)
json_dict = json.loads(json_str)
Однако это расширение будет нарушать синтаксис JSON, так как json_str стал
'{"key":"quote"value"}' (<== bad unescaped quote in the value)
вместо
'{"key":"quote\"value"}'
Есть в любом случае я могу сообщить os.path.expandvars() избежать двойной кавычки при расширении значения? Если нет, как мне следует расширять переменную окружения, чтобы можно было избежать двойной кавычки.
Примечание 1 Значение переменной окружения является токеном безопасности, поэтому мне нужно сохранить двойную кавычку там, где есть.
Примечание 2 Текущий интерфейс json уже определен и используется в широком смысле, как есть. Этот json_str передан мне, поэтому я должен и должен только расширять переменную среды, обозначенную $ {} в строке json, никакая другая модификация не разрешена.
Примечание 3 Этот json_str чрезвычайно велик со сложной динамической вложенной структурой и потребляется несколькими клиентами, которые не могут получить доступ к переменной среды os хоста os. Хотя я могу сначала загрузить json_str, повернуть словарь, чтобы разрешить переменную окружения, а затем сбрасывать dict обратно в json_str, а затем отправлять всем клиентам, я думаю, что он менее эффективен по сравнению с обработкой его как строки ,
Спасибо.
Нужно ли вам расширить переменную окружения в строке json? Не могли бы вы сделать что-то простое: '{" key ": os.env ['VALUE_WITH_QUOTE_FROM_OS']}' – mgilson
@mgilson Да, этот json_str предоставляется пользователем, поэтому я ** должен расширять ** строку json.and can not измените json_str, кроме этого. – cookieisaac