Сводка файла Yaml
Файлы Yaml имеют собственный независимый синтаксис и часто используются в качестве конфигурационных файлов.По сравнению с xml и json количество ненужных тегов или скобок уменьшено, а чтение более понятное и простое.Эта статья в основном знакомит с основным синтаксисом файлов YAML, и как реализовать логику чтения и записи в Java
I. Базовая грамматика
- Используйте Space Indentation для обозначения слоев.Для отступа между разными слоями можно использовать разное количество пробелов, но элементы одного и того же слоя должны быть выровнены по левому краю, то есть количество пробелов перед ними одинаково (не используйте вкладки)
-
#
Обозначает однострочный комментарий - Дефис, за которым следует пробел (тире и пробел), указывает на список
- Используйте двоеточия и пробелы для представления пар ключ-значение ключ: значение
- Простые данные (скаляры, скалярные данные) можно заключать без кавычек, включая строковые данные
- Данные, заключенные в одинарные или двойные кавычки, обрабатываются как строковые данные, а escape-символы в стиле C используются в одинарных или двойных кавычках.
1. Запись массива
Простой массив с-
перечислить следующим образом
- apple
- orange
- banana
2. Объект
простой кв объект
fruit:
name: banana
amount: 3
price: 4.99
Структура данных после загрузки выглядит следующим образом:
3. Массив объектов
Во-первых, большая структура — это массив, но внутри массива находится объект структуры kv.
-
name: apple
price: 1.23
-
name: orange
price: 1.33
-
name: banana
price: 2.33
Структура данных после загрузки выглядит следующим образом:
4. Объект массива
Во-первых, большая структура — это объект, а члены внутри объекта — это массивы.
name:
- apple
- orange
- banana
price:
- 4.99
- 2.34
- 3.99
Структура данных после загрузки выглядит следующим образом:
5. Многомерные массивы
- [apple, 3.88]
- [orange, 3.99]
- [banana, 2.99]
Он заключен в квадратные скобки для формирования двумерного массива.Загруженная структура данных выглядит следующим образом
6. Расширенное написание объектов
Для объектов kv-структуры их можно заменить фигурными скобками, чтобы упростить количество строк в конфигурационном файле
love: {name: apple, price: 2.99}
hite: {name: orange, price: 1.99}
Приведенная выше конфигурация эквивалентна
love:
name: apple
price: 2.99
hite:
name: orange
price: 1.99
II. Чтение и запись файла YAML
В экологическом окружении Java чтение и запись YAML-файлов — относительно простая вещь: один — прочитать файл самостоятельно, а затем разобрать его по грамматике (он принадлежит вашим собственным колесам), другой — использовать открытый исходный код библиотеки для чтения и записи, конечно, вот Выберите хорошо зарекомендовавшую себя библиотеку с открытым исходным кодом для работы с
1. Зависимость
Добавьте зависимости maven в файл pom и запросите номер последней версии.
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.17</version>
</dependency>
2. Класс упаковки
public class YamlUtil {
public static InputStream loadStream(String path) throws IOException {
if (path.startsWith("http")) {
URL url = new URL(path);
return url.openStream();
} else if (path.startsWith("/")) {
return new FileInputStream(path);
} else {
return YamlUtil.class.getClassLoader().getResourceAsStream(path);
}
}
public static <T> T loadConf(String path, Class<T> clz) throws IOException {
try (InputStream inputStream = loadStream(path)) {
Yaml yaml = new Yaml();
return yaml.loadAs(inputStream, clz);
}
}
public static <T> void dumpConf(String save, T obj) throws IOException {
Yaml yaml = new Yaml();
yaml.dump(obj, new BufferedWriter(new FileWriter(save)));
}
}
Реализация относительно проста, можно напрямую использовать метод loadAs/dump объекта Yaml, для теста приведены предыдущие скриншоты, поэтому повторяться не буду.
III. Другое
0. Резюме
Основной синтаксис:
- Используйте Space Indentation для обозначения слоев.Для отступа между разными слоями можно использовать разное количество пробелов, но элементы одного и того же слоя должны быть выровнены по левому краю, то есть количество пробелов перед ними одинаково (не используйте вкладки)
-
#
Обозначает однострочный комментарий - Дефис, за которым следует пробел, указывает на список
- Используйте двоеточия и пробелы для представления пар ключ-значение ключ: значение
- Простые данные могут быть заключены без кавычек, включая строковые данные.
- Данные, заключенные в одинарные или двойные кавычки, обрабатываются как строковые данные, а escape-символы в стиле C используются в одинарных или двойных кавычках.
Демонстрация побега:
comment: '#'
skip: "abc\n123"
Соответствующий тестовый пример и вывод
@Test
public void testYamlUtil() throws IOException {
TC map = YamlUtil.loadConf("test.yml", TC.class);
System.out.println(map);
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class TC {
private String comment;
private String skip;
}
выходной результат
YamlUtilTest.TC(comment=#, skip=abc
123)
1. Серый блог: https://juneb.GitHub.IO/hex блог
Серый личный блог, записывающий все посты блога по учебе и работе, приглашаю всех в гости
2. Заявление
Это не так хорошо, как письмо веры.Контент уже был размещен, и это чисто из семьи.Из-за ограниченных личных возможностей неизбежно будут упущения и ошибки.Если вы найдете ошибки или лучше предложения, вы можете критиковать и исправлять их.
- Адрес вейбо:Маленький серый блог
- QQ: серо-серый / 3302797840