Обновите существующий файл Yaml - PullRequest
0 голосов
/ 11 января 2019

Я хочу обновить свой существующий файл user.yaml, не стирая другие объекты или свойства.

Я два дня гуглял в поисках решения, но безуспешно.

Фактический объем производства:

name: Test User
age: 30
address:
  line1: My Address Line 1
  line2: Address line 2
  city: Washington D.C.
  zip: 20000
roles:
  - User
  - Editor

Ожидаемый результат

name: Test User
age: 30
address:
  line1: Your address line 1
  line2: Your Address line 2
  city: Bangalore
  zip: 560010
roles:
  - User
  - Editor

Это мой файл yaml. Я хочу получить этот файл yaml, обновить адрес объекта и записать ту же информацию в новый файл yaml / существующий файл yaml. Это должно быть сделано без вреда для других объектов (т.е. ключ и значения других объектов должны быть сохранены).

1 Ответ

0 голосов
/ 11 января 2019

Вам понадобится ObjectMapper (от jackson-databind) и YAMLFactory (от jackson-dataformat-yaml).

ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());

Тогда это просто: просто прочитайте файл YAML, измените его содержимое и запишите файл YAML.

Поскольку в вашем примере очень простая структура объектов, вы можете предпочесть быстрое и грязное моделирование, используя Map<String, Object>.

// read YAML file
Map<String, Object> user = objectMapper.readValue(new File("user.yaml"),
            new TypeReference<Map<String, Object>>() { });

// modify the address
Map<String, Object> address = (Map<String, Object>) user.get("address");
address.put("line1", "Your address line 1");
address.put("line2", "Your address line 2");
address.put("city", "Bangalore");
address.put("zip", 560010);

// write YAML file
objectMapper.writeValue(new File("user-modified.yaml"), user);

Если бы у вас была более сложная структура объекта, тогда вы должны сделать более объектно-ориентированное моделирование написав несколько POJO классов (User и Address). Но общая идея все та же:

// read YAML file
User user = objectMapper.readValue(new File("user.yaml"), User.class);

// modify the address
Address address = user.getAddress();
address.setLine1("Your address line 1");
address.setLine2("Your address line 2");
address.setCity("Bangalore");
address.setZip(560010);

// write YAML file
objectMapper.writeValue(new File("user-modified.yaml"), user);
...