Знакомая команда
tree рисует дерево из директорий. А что если так же наглядно хочется посмотреть на структуру конфига или ответа API? Для этого есть xtree — небольшая CLI-утилита из проекта gtree, которая берёт JSON, YAML или TOML и выводит их в виде привычного ASCII-дерева.❓ Зачем это нужно
Вложенные конфиги и API-ответы быстро становятся нечитаемыми: глаза теряются в скобках и отступах.
xtree сводит любую из трёх структур к единому древовидному виду, где иерархия видна с первого взгляда. Удобно, когда нужно быстро понять форму данных, сравнить два файла или показать структуру коллеге.Это часть более крупного проекта gtree, который умеет строить деревья из Go-кода и из Markdown-списков.
xtree — отдельная команда именно для форматов данных.Базовое использование
Отдаёте файл в
stdin и вызываете xtree output:$ cat a.json | xtree output
$ cat a.yaml | xtree output
$ cat a.toml | xtree output
Возьмём JSON:
{
"name": "Alice",
"age": 30,
"roles": ["admin", "editor"],
"settings": {
"theme": "dark",
"notifications": true
},
"devices": [
{ "type": "mobile", "os": "ios" },
{ "type": "desktop", "os": "windows" }
]
}После
cat a.json | xtree output:.
├── age
│ └── 30
├── devices
│ ├── [0]
│ │ ├── os
│ │ │ └── ios
│ │ └── type
│ │ └── mobile
│ └── [1]
│ ├── os
│ │ └── windows
│ └── type
│ └── desktop
├── name
│ └── Alice
├── roles
│ ├── [0]
│ │ └── admin
│ └── [1]
│ └── editor
└── settings
├── notifications
│ └── true
└── theme
└── dark
Та же логика работает для YAML и TOML — на выходе получаем идентичное дерево. Элементы массивов помечаются индексами
[0], [1] и так далее.➡️ Полезные флаги
У команды
output есть три флага, которые делают вывод лучше.•
--omit-index (-o) убирает индексы массивов. Вместо отдельных веток [0], [1] значения схлопываются под общим ключом:$ cat a.json | xtree output --omit-index
...
├── roles
│ ├── admin
│ └── editor
...
•
--level N (-l) ограничивает глубину дерева. Удобно для обзора верхнего уровня большого файла:$ cat a.json | xtree output --level 1
.
├── age
├── devices
├── height
├── is_active
├── metadata
├── name
├── roles
└── settings
•
--allow-duplicate (-a) разрешает узлы с одинаковыми именами на одном уровне.Флаги комбинируются — например,
xtree output --level 2 --omit-index покажет два уровня без индексов.xtree — это маленький, но удобный инструмент на каждый день: один пайп, и нечитаемый конфиг превращается в наглядное дерево. ➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
