Вопрос простой, но немного сложно правильно его сформулировать.
По сути, у меня есть словарь со следующими данными:
x = { foo: [1, '\n', 'bar'] }
Когда я конвертирую в yaml, используя pyyaml с yaml.safe_dump(x, default_flow_style=False)
, я ожидаю, что результат будет таким:
foo:
- 1
- '\n'
- bar
однако я получаю что-то вроде
foo:
- 1
- '
'
- bar
Символ новой строки фактически интерпретируется вместо того, чтобы передаваться как строка '\n'.
Я просматривал документацию pyyaml, но не видел правильных заклинаний, чтобы эта вещь правильно анализировалась.
Кто-нибудь имел дело с этой же проблемой раньше? Как вы это решили?
Чтобы дать больше контекста, об этом.
У меня есть json, который я хочу преобразовать в yaml.
Файл, в котором есть что-то вроде этого:
{
"content": {
"Fn::Join": ["\n", [{ "Ref": "parentStackName" }, ""]]
}
}
конечный результат должен быть таким:
content:
Fn::Join:
- "\n"
- - Ref: parentStackId
- ''
обратите внимание, что "\n"
- это просто строка, а не фактический символ.
Процедура, которую я использую:
- Открыть файл
- Разобрать json из текста в диктовку
- Используйте dict для дампа в yaml
Когда я создаю словарь, вы можете видеть «\n» как часть строки. Когда pyyaml сбрасывает это в yaml, все идет наперекосяк.
'\n'
), представляет собой новую строку, а не буквальную обратную косую черту, за которой следует литерал n, поэтому вывод YAML, который вы получаете, имеет смысл. Вы говорите, что хотите преобразовать символы, такие как перевод строки, в их представления управляющей последовательности? Или вы хотите, чтобы ваша строка была'\\n'
(буквальная обратная косая черта, буквальная n)? - person ThisSuitIsBlackNot   schedule 24.01.2017"\n"
в строке JSON представляет собой новую строку, а не буквальную обратную косую черту, за которой следует литерал n (см. pdf" rel="nofollow noreferrer">spec). Таким образом, вы получаете ожидаемый результат. - person ThisSuitIsBlackNot   schedule 24.01.2017'\n'
полностью отличается от"\n"
. В своем ответе я предположил, что вы хотите вторую версию. - person Anthon   schedule 24.01.2017r'\n'
вместо'\n'
вx
? - person boardrider   schedule 25.01.2017