Как сохранить комментарии при редактировании файла 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 ответ

Обновить — этот подход работает только в том случае, если внутри массива нет комментариев:

Если производительность не является проблемой, вы можете использовать следующий хак в качестве быстрого и грязного решения:

  1. разобрать исходный hjson-файл и записать его в tmp-файл "tmp1.hjson" без внесения изменений
  2. разбираем исходный hjson-файл, вносим нужные изменения и пишем в "tmp2.hjson"
  3. прочитать содержимое обоих файлов и сохранить разницу (сохранить как oldContent, так и newContent, но только то, что изменилось)
  4. В исходном hjson-файле замените oldContent на newContent. Не используйте для этого парсер serde_hjson — просто прочитайте файл как текст, сделайте замену в строке содержимого и перезапишите содержимое файла.

Я не очень хорошо разбираюсь в Rust, но, возможно, шаги 1 и 2 возможны без создания реального файла.

Другие вопросы по тегам