В экосистеме Vega и Vega-Lite JSON выполняет двойную роль: он используется и как формат описания визуализации, и как контейнер для данных. Архитектура библиотек построена вокруг декларативного описания, где вся графика выражается через структурированный JSON-объект.
Vega использует строгую JSON-спецификацию, описывающую:
Базовая структура выглядит как вложенный объект:
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 400,
"height": 200,
"data": [
{
"name": "table",
"values": [
{"x": 1, "y": 28},
{"x": 2, "y": 55},
{"x": 3, "y": 43}
]
}
],
"marks": [
{
"type": "line",
"from": {"data": "table"},
"encode": {
"enter": {
"x": {"scale": "x", "field": "x"},
"y": {"scale": "y", "field": "y"}
}
}
}
]
}
Ключевой особенностью JSON в Vega является полная декларативность: описание не содержит императивной логики, а фиксирует структуру визуализации.
Vega-Lite является надстройкой над Vega, сокращающей сложность спецификаций. JSON остаётся основным форматом, но структура упрощается:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{"category": "A", "value": 28},
{"category": "B", "value": 55}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"}
}
}
В отличие от Vega:
JSON используется не только как формат спецификации, но и как способ передачи данных.
Inline-данные задаются через массив объектов:
{
"data": {
"values": [
{"year": 2020, "sales": 100},
{"year": 2021, "sales": 150}
]
}
}
Характерные особенности:
Vega и Vega-Lite поддерживают загрузку JSON через URL:
{
"data": {
"url": "data/sales.json"
}
}
Дополнительно возможно указание формата:
{
"data": {
"url": "data/sales.json",
"format": {
"type": "json"
}
}
}
JSON в этом контексте является базовым типом, поскольку структура уже соответствует объектной модели JavaScript.
CSV (Comma-Separated Values) является одним из наиболее распространённых форматов для работы с табличными данными в Vega и Vega-Lite.
{
"data": {
"url": "data/sales.csv",
"format": {
"type": "csv"
}
}
}
CSV автоматически преобразуется в массив объектов, где первая строка обычно используется как заголовки полей:
year,sales
2020,100
2021,150
Результат интерпретации:
[
{"year": "2020", "sales": "100"},
{"year": "2021", "sales": "150"}
]
CSV не содержит типов, поэтому Vega/Vega-Lite применяют преобразования:
{
"data": {
"url": "data/sales.csv",
"format": {
"type": "csv"
}
},
"transform": [
{
"calculate": "toNumber(datum.sales)",
"as": "sales_num"
}
]
}
Особенности:
TSV (Tab-Separated Values) является вариацией CSV, где разделителем выступает табуляция.
{
"data": {
"url": "data/sales.tsv",
"format": {
"type": "tsv"
}
}
}
Пример данных:
year sales
2020 100
2021 150
TSV имеет преимущества при работе с данными, содержащими запятые, поскольку табуляция редко встречается внутри значений.
\tDSV (Delimiter-Separated Values) представляет собой универсальный формат, позволяющий задавать произвольный разделитель.
{
"data": {
"url": "data/sales.dsv",
"format": {
"type": "dsv",
"delimiter": "|"
}
}
}
Пример данных:
year|sales|region
2020|100|EU
2021|150|US
DSV используется в случаях, когда:
JSON:
CSV:
TSV:
DSV:
Vega-Lite использует единый pipeline обработки данных:
{
"data": {
"url": "data/sales.csv",
"format": {"type": "csv"}
},
"transform": [
{"calculate": "toNumber(datum.sales)", "as": "sales"}
],
"mark": "line",
"encoding": {
"x": {"field": "year", "type": "temporal"},
"y": {"field": "sales", "type": "quantitative"}
}
}
Формат данных влияет только на этап парсинга, не затрагивая визуальную часть спецификации.
В отличие от табличных форматов, JSON в Vega/Vega-Lite:
{
"data": {
"values": [
{
"category": "A",
"metrics": {"sales": 100, "profit": 20}
}
]
}
}
Такой формат недоступен для CSV/TSV/DSV без потери структуры.
Пример приведения:
{
"transform": [
{"calculate": "+datum.value", "as": "value_num"}
]
}
Vega runtime использует единый механизм загрузки данных:
Каждый формат проходит нормализацию:
| Формат | Результат |
|---|---|
| JSON | объект/массив |
| CSV | массив объектов |
| TSV | массив объектов |
| DSV | массив объектов |
Форматы данных в Vega/Vega-Lite определяют только один уровень системы — ingestion layer.
Далее система полностью независима от исходного формата:
Такое разделение позволяет: