Преобразование YAML
YAML ⇄ JSON · YAML в Properties · многодокументность, якоря и ошибки по строке и столбцу
.inf / .nan 因为 JSON 没有这两个值会变成 null。如果你要的是"把 YAML 存回去还跟原来一模一样",本页做不到,任何转换工具都做不到。
Ввод
粘贴 YAML选项切换方向后选项会跟着变
YAML 的锚点与别名在解析阶段就展开成真实值,所以这里没有「保留引用」开关——JSON 里也没有引用这个概念。为什么没有 noRefs 开关:js-yaml 的 noRefs 只对「含共享引用的 JS 对象」生效,而本页输入是文本(YAML 锚点已被展开、JSON 没有引用语义),开关不会产生任何可观察差异,故不提供。
行宽只影响长字符串的换行方式:超过行宽时 js-yaml 会用折叠块(>-)折行。语义不变,但看起来会和你手写的 YAML 不一样。
嵌套对象用点连接(spring.datasource.url)。只有一份文档能转:多文档(---)没有对应的键值形式,会明确报错。空对象与空数组在 .properties 里无法表示,会被跳过并在结果里计数。
Результат
类型边界:YAML 会把这些写成什么
本页按 YAML 1.2 的 core schema 解析(js-yaml 4.x 默认行为)。下面每一条都是本页实测结果,不是"按印象写的":
| YAML 写法 | 解析成 | 转成 JSON |
|---|---|---|
| true / false / True / TRUE | 布尔 | true / false |
| yes / no / on / off / YES | 字符串 | "yes" 等——YAML 1.2 里这些不是布尔(1.1 才是) |
| 007 | 数字 7 | 7(不是八进制;八进制要写 0o17) |
| 0x1F | 数字 31 | 31 |
| 1e3 | 数字 1000 | 1000 |
| 00123 这类要保留前导零的编号 | 数字 123 | 123——要保号请写成 "00123"(带引号) |
| 2024-01-02 / 2024-01-02 03:04:05 | 时间戳(Date) | "2024-01-02T00:00:00.000Z"(ISO 字符串) |
| ~ / null / 空值 | null | null |
| .inf / -.inf / .nan | ±Infinity / NaN | null——JSON 没有这两个值,信息会丢 |
| 123456789012345678901234567890 | 双精度近似值 | 1.2345678901234568e+29——长 ID 请写成字符串 |
| "007"(带引号) | 字符串 "007" | "007" |
| 块标量 | | 保留换行的字符串 | 带 \n 的字符串 |
| 块标量 > | 换行折叠成空格 | 单行字符串 |
Частые вопросы
Исчезают или разворачиваются. Комментарии в YAML - для людей; понятия комментариев в JSON нет, так что они теряются всегда - одна из причин писать конфиг в YAML, а данные передавать в JSON. Анкоры и алиасы (&x / *x) разворачиваются в реальные значения ещё на разборе, каждая ссылка становится независимой копией: данные эквивалентны, размер растёт, связь переиспользования пропадает. Многодокументный ввод (разделители ---) превращается по порядку в JSON-массив - по элементу на документ.
Потому что страница использует core-схему YAML 1.2 (поведение js-yaml 4.x по умолчанию): булевы значения - только true / false (и True / False / TRUE / FALSE); yes / no / on / off, наследие YAML 1.1, здесь обычные строки. Так же 007 разбирается как число 7 (не восьмеричное), 0x1F - как 31, а дата вида 2024-01-02 распознаётся как метка времени и в JSON становится ISO-строкой. .inf и .nan - допустимые числа YAML, но таких значений в JSON нет, они конвертируются в null. Все эти границы типов перечислены в таблице над полем.
Плоскими путями ключей: вложенные объекты склеиваются точками (spring.datasource.url), массивы по умолчанию получают индексы в скобках (list[0], list[1]; объекты внутри массива снова через точку, users[0].name), можно переключиться на точечные индексы (list.0). Обратные слеши, переводы строк, табуляции и ведущие пробелы в значениях экранируются по правилам java.util.Properties; китайский по умолчанию остаётся как есть (Java 8+ читает UTF-8 без проблем), для старых инструментов есть переключатель «китайский в \uXXXX». Пустые объекты и массивы в .properties изобразить нечем - они пропускаются, и их количество указывается в итоге.
Никуда. Разбор, конвертация и генерация идут в браузере - конфиг не покидает машину, перезагрузка стирает его, страница не делает ни одного сетевого запроса (сам js-yaml размещён на сайте, без CDN). Обратное направление, Properties в YAML, намеренно не предлагается: превращать пути ключей обратно в вложенность - значит угадывать, какие точки иерархия, а какие часть имени ключа (a.b.c - три уровня или один ключ с буквальным именем a.b.c?), а неверная догадка молча меняет смысл конфига. Сделайте это вручную или доверьте связывание фреймворку вроде Spring Boot.