Синтаксис файла Yaml и сводка по чтению и записи

Java задняя часть GitHub открытый источник

logo

Сводка файла Yaml

Файлы Yaml имеют собственный независимый синтаксис и часто используются в качестве конфигурационных файлов.По сравнению с xml и json количество ненужных тегов или скобок уменьшено, а чтение более понятное и простое.Эта статья в основном знакомит с основным синтаксисом файлов YAML, и как реализовать логику чтения и записи в Java

I. Базовая грамматика

  • Используйте Space Indentation для обозначения слоев.Для отступа между разными слоями можно использовать разное количество пробелов, но элементы одного и того же слоя должны быть выровнены по левому краю, то есть количество пробелов перед ними одинаково (не используйте вкладки)
  • #Обозначает однострочный комментарий
  • Дефис, за которым следует пробел (тире и пробел), указывает на список
  • Используйте двоеточия и пробелы для представления пар ключ-значение ключ: значение
  • Простые данные (скаляры, скалярные данные) можно заключать без кавычек, включая строковые данные
  • Данные, заключенные в одинарные или двойные кавычки, обрабатываются как строковые данные, а escape-символы в стиле C используются в одинарных или двойных кавычках.

1. Запись массива

Простой массив с-перечислить следующим образом

- apple
- orange
- banana

2. Объект

простой кв объект

fruit:
  name: banana
  amount: 3
  price: 4.99

Структура данных после загрузки выглядит следующим образом:

1

3. Массив объектов

Во-первых, большая структура — это массив, но внутри массива находится объект структуры kv.

-
  name: apple
  price: 1.23
-
  name: orange
  price: 1.33
-
  name: banana
  price: 2.33

Структура данных после загрузки выглядит следующим образом:

2

4. Объект массива

Во-первых, большая структура — это объект, а члены внутри объекта — это массивы.

name:
  - apple
  - orange
  - banana
price:
  - 4.99
  - 2.34
  - 3.99

Структура данных после загрузки выглядит следующим образом:

3

5. Многомерные массивы

- [apple, 3.88]
- [orange, 3.99]
- [banana, 2.99]

Он заключен в квадратные скобки для формирования двумерного массива.Загруженная структура данных выглядит следующим образом

image

6. Расширенное написание объектов

Для объектов kv-структуры их можно заменить фигурными скобками, чтобы упростить количество строк в конфигурационном файле

love: {name: apple, price: 2.99}
hite: {name: orange, price: 1.99}

image

Приведенная выше конфигурация эквивалентна

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. Заявление

Это не так хорошо, как письмо веры.Контент уже был размещен, и это чисто из семьи.Из-за ограниченных личных возможностей неизбежно будут упущения и ошибки.Если вы найдете ошибки или лучше предложения, вы можете критиковать и исправлять их.

3. Сканируйте внимание

blogInfoV2.png