TGViewer
Библиотека Go-разработчика | Golang Библиотека Go-разработчика | Golang @goproglib · 24.1K subscribers
Post #7312 2.54K
🌳 Превращаем JSON, YAML и TOML в ASCII-дерево

Знакомая команда 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
  • 👍 10
  • 🤔 1
More from @goproglib
  1. Sep 26, 2026🔥 В Go 1.27 появился portable SIMD До этого SIMD-оптимизации в Go требовали архитектурног…
  2. Sep 25, 2026🤡🤡 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoGiggle
  3. Sep 25, 2026💡 Код работает. А data race уже есть В Go можно записать значение в одной горутине, прочи…
  4. Sep 23, 2026💥 TCP/IP: что происходит с данными в сети Когда Go-приложение отправляет данные по сети,…
  5. Sep 22, 2026🔴 Встроенные функции len, make, panic — встроенные функции Go, которые можно использовать…
  6. Sep 21, 2026🤩 Go с нуля: серия базовых шпаргалок Собрали путь от Hello, World! до goroutines, channel…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →