企评社

Язык подписей интерфейса: Русский. Отзывы о компаниях, сообщения форума и описания инструментов пока доступны только на китайском языке.

Преобразование YAML

YAML ⇄ JSON · YAML в Properties · многодокументность, якоря и ошибки по строке и столбцу

转换全部在你的浏览器里完成,配置内容不上传、不留存
转换不是无损的,先知道会丢什么。 YAML 的注释在 JSON / Properties 里没有任何对应位置,转换后一定丢失;锚点与别名(&x / *x)在解析阶段就展开成真实值,转换后每个引用点都是独立副本(数据等价,体积变大);缩进、引号风格、块标量(| 与 >)这些书写形式不会原样保留;YAML 里的日期会被识别成时间戳、转成 ISO 字符串,.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数字 77(不是八进制;八进制要写 0o17)
0x1F数字 3131
1e3数字 10001000
00123 这类要保留前导零的编号数字 123123——要保号请写成 "00123"(带引号)
2024-01-02 / 2024-01-02 03:04:05时间戳(Date)"2024-01-02T00:00:00.000Z"(ISO 字符串)
~ / null / 空值nullnull
.inf / -.inf / .nan±Infinity / NaNnull——JSON 没有这两个值,信息会丢
123456789012345678901234567890双精度近似值1.2345678901234568e+29——长 ID 请写成字符串
"007"(带引号)字符串 "007""007"
块标量 |保留换行的字符串带 \n 的字符串
块标量 >换行折叠成空格单行字符串

Частые вопросы

Куда деваются комментарии и анкоры при превращении YAML в JSON?

Исчезают или разворачиваются. Комментарии в YAML - для людей; понятия комментариев в JSON нет, так что они теряются всегда - одна из причин писать конфиг в YAML, а данные передавать в JSON. Анкоры и алиасы (&x / *x) разворачиваются в реальные значения ещё на разборе, каждая ссылка становится независимой копией: данные эквивалентны, размер растёт, связь переиспользования пропадает. Многодокументный ввод (разделители ---) превращается по порядку в JSON-массив - по элементу на документ.

Почему yes / no / on / off выходят строками, а не true / false?

Потому что страница использует 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. Все эти границы типов перечислены в таблице над полем.

Как вложенность и массивы становятся ключами при конвертации в .properties?

Плоскими путями ключей: вложенные объекты склеиваются точками (spring.datasource.url), массивы по умолчанию получают индексы в скобках (list[0], list[1]; объекты внутри массива снова через точку, users[0].name), можно переключиться на точечные индексы (list.0). Обратные слеши, переводы строк, табуляции и ведущие пробелы в значениях экранируются по правилам java.util.Properties; китайский по умолчанию остаётся как есть (Java 8+ читает UTF-8 без проблем), для старых инструментов есть переключатель «китайский в \uXXXX». Пустые объекты и массивы в .properties изобразить нечем - они пропускаются, и их количество указывается в итоге.

Мой конфиг куда-то уходит? Умеете Properties обратно в YAML?

Никуда. Разбор, конвертация и генерация идут в браузере - конфиг не покидает машину, перезагрузка стирает его, страница не делает ни одного сетевого запроса (сам js-yaml размещён на сайте, без CDN). Обратное направление, Properties в YAML, намеренно не предлагается: превращать пути ключей обратно в вложенность - значит угадывать, какие точки иерархия, а какие часть имени ключа (a.b.c - три уровня или один ключ с буквальным именем a.b.c?), а неверная догадка молча меняет смысл конфига. Сделайте это вручную или доверьте связывание фреймворку вроде Spring Boot.

Похожие инструменты