Tree view for JSON with expand/collapse, syntax-style colouring, copy, optional line numbers, and array truncation.

Visualização interativa de JSON em árvore (packages/ui/src/components/json-viewer.tsx), com realce por tipo, detecção de URLs e datas, botões para expandir/recolher tudo e copiar o payload formatado. Em viewports estreitos a truncagem de arrays desliga-se automaticamente.

Importação

import { JsonViewer } from "@zexon/ui/components/json-viewer";

Tipos úteis: JsonValue, JsonPrimitive, JsonViewerProps.

Uso básico

Objeto

Resposta
'id': 'evt_7f2a',
'created_at': '2024-01-15T10:00:00.000Z'// há cerca de 2 anos,
'status': 'ok',
'count': 42,
}

Raiz em array

Array na raiz

Lista
'alpha',
'beta',
]

Indentação colorida e nível inicial expandido

showColorIndent destaca o guia à esquerda por nível. defaultExpanded pode ser true (tudo aberto), false (só a raiz, predefinição) ou um número (profundidade máxima expandida).

Profundidade e cores

Profundidade 2
}
},
1,
2,
3
]
}

Truncagem de arrays

Com truncation.enabled (predefinição: true em desktop) listas longas mostram só os primeiros itemsPerArray valores (predefinição: 5) e um botão para carregar o restante.

Array longo

Truncado (3 por bloco)
}

Duplo clique para expandir

collapseOn="doubleClick" exige duplo clique na linha do objecto ou array para alternar (clique simples não expande).

Duplo clique

Duplo clique nas linhas
'a': 1,
}

Sem números de linha

Sem linhas

'x': 1
}

Props

PropTipoPredefiniçãoNotas
dataJsonValueObjecto, array ou valor JSON em raiz
classNamestringClasses no contentor externo
titlestringTexto opcional na barra superior
showLineNumbersbooleantrueA coluna de números só aparece a partir do breakpoint sm
showColorIndentbooleanfalseBorda esquerda por nível com cores rotativas
collapseOn"click" | "doubleClick""click"Como alternar nós objecto/array
defaultExpandedboolean | numberfalsetrue = expandir tudo; número = profundidade máxima; false mantém só a raiz aberta
truncation{ enabled?: boolean; itemsPerArray?: number }{ enabled: true, itemsPerArray: 5 } em desktopEm mobile enabled fica false

O botão Copiar JSON usa o mesmo fluxo que outros componentes (useCopyToClipboard).

Anterior:

Próximo: