更新现有的 Yaml 文件
Update the existing Yaml file
我想更新我现有的 user.yaml
文件而不删除其他对象或属性。
我已经在谷歌上搜索了 2 天的解决方案,但没有成功。
实际输出:
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 文件。这必须在不损害其他对象的情况下完成(即应保留其他对象的键和值)。
您将需要 YAMLMapper
(from jackson-databind-yaml
)
这是 ObjectMapper
(from jackson-databind
).
的特定于 YAML 的实现
ObjectMapper objectMapper = new YAMLMapper();
那就简单了:读取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);
我想更新我现有的 user.yaml
文件而不删除其他对象或属性。
我已经在谷歌上搜索了 2 天的解决方案,但没有成功。
实际输出:
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 文件。这必须在不损害其他对象的情况下完成(即应保留其他对象的键和值)。
您将需要 YAMLMapper
(from jackson-databind-yaml
)
这是 ObjectMapper
(from jackson-databind
).
ObjectMapper objectMapper = new YAMLMapper();
那就简单了:读取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);