Как сохранить комментарии при редактировании файла hjson?
У меня есть файл конфигурации в формате h json. В этом файле много значений и комментариев.
Упрощенный файл выглядит так:
{
# Comments
# comments
Variants: [v1, v2, v3]
# Comments
# comments
Values: { v1: ["asd"]}
# Comments
# comments
Some: [p1, p2]
# Comments
# comments
Name: Champion
# Comments
# comments
Something: [a,b,c]
# etc
# ...
}
Мне нужно только внести изменения в один массив:Variants
(Мне нужно добавить туда значения).
Остальное остается без изменений.
Теперь я делаю это, разбирая с помощью serde_hjson (nu_json), работая с конфигом как с объектом и записывая измененный объект обратно в файл как json.
В результате все комментарии теряются.
Подскажите, пожалуйста, как сделать то, что мне нужно, не теряя комментарии в файле.
Комментарии могут быть самыми разнообразными — у каждого пользователя они свои.
PS: этот формат файла конфигурации был выбран не мной, это другое приложение.
1 ответ
Обновить — этот подход работает только в том случае, если внутри массива нет комментариев:
Если производительность не является проблемой, вы можете использовать следующий хак в качестве быстрого и грязного решения:
- разобрать исходный hjson-файл и записать его в tmp-файл "tmp1.hjson" без внесения изменений
- разбираем исходный hjson-файл, вносим нужные изменения и пишем в "tmp2.hjson"
- прочитать содержимое обоих файлов и сохранить разницу (сохранить как oldContent, так и newContent, но только то, что изменилось)
- В исходном hjson-файле замените oldContent на newContent. Не используйте для этого парсер serde_hjson — просто прочитайте файл как текст, сделайте замену в строке содержимого и перезапишите содержимое файла.
Я не очень хорошо разбираюсь в Rust, но, возможно, шаги 1 и 2 возможны без создания реального файла.