PBToolboxAI v4 ← Site

jsontree — u_pbt_jsontree #

← Referência dos componentes · Índice do guia

jsontree mostra um valor JSON como uma árvore recolhível, colorida por tipo: um ecrã de configuração, uma resposta de API, uma depuração de integração. Define o texto JSON em is_json, o componente mostra-o; um clique num nó reporta o seu caminho (ue_node_clicked), um JSON inválido levanta ue_error. Não modifica nada: é um VISUALIZADOR.

▶ Ver ao vivo — Aplicação de demonstração, mosaico JSON tree, com o código e esta página lado a lado.


Em resumo #

Userobjectu_pbt_jsontree
EntradaO texto JSON, em is_json (uma cadeia)
Dobrar / desdobrarCada contentor pelo seu marcador + / − na margem dos números, pelo seu caminho (of_expand_path, of_collapse_path), ou tudo de uma vez (of_expand_all, of_collapse_all)
RetornoUm clique num nó dá o seu caminho (ue_node_clicked), o de n_pbt_json: lines/1/sku; um JSON inválido levanta ue_error
FidelidadeCada número e cada chave mostram-se tal como recebidos: um identificador de 64 bits continua exato, 1.10 continua 1.10, uma chave duplicada mantém os dois membros

Início rápido #

// Show an API response as a tree
uo_json.is_json = inv_rest.of_response_text()

// Fold everything, then let the user open what interests them
uo_json.of_collapse_all()

// ue_node_clicked : the path of the node clicked ("lines/1/sku"), the path of
// n_pbt_json -> of_get_string(as_path) on the same text reads its value

Propriedades #

PropriedadeTipoPredefinidoDescrição
is_jsonstring""O texto JSON a mostrar. Um objeto, um array, um valor; lido e mostrado como uma árvore, cada número e cada chave tal como recebidos. Vazio limpa a árvore, sem erro; um JSON inválido levanta ue_error e não mostra nada. Relê-se exatamente como foi definido
ib_wrapbooleantrueAs linhas longas quebram (true, por omissão) ou ficam numa linha com barra horizontal (false) — um aspeto de editor de código
ib_search_enabledbooleantrueCtrl+F na árvore abre uma caixa de pesquisa — a mesma pesquisa que of_search: escrever realça, Enter ou F3 seguinte, Shift+Enter ou Shift+F3 anterior, Esc fecha. false deixa o atalho a uma aplicação que pesquisa a partir da sua própria caixa. A caixa tem dois botões antes do contador, Aa (ib_find_match_case) e ab (ib_find_whole_word); mudar uma opção relança a pesquisa em curso a partir da sua primeira ocorrência
ib_find_match_casebooleanfalseOpção de pesquisa: só encontra o texto com as mesmas maiúsculas e minúsculas. O botão Aa da caixa de pesquisa (Ctrl+F) é o mesmo interruptor; vale para of_search e para o que o utilizador escreve. Lida em direto; of_reset repõe-na a false
ib_find_whole_wordbooleanfalseOpção de pesquisa: só encontra o texto como palavra inteira (uma letra, um algarismo ou um _ ao lado faz parte da palavra: id não é encontrado nem em user_id nem em ids). O botão ab da caixa de pesquisa é o mesmo interruptor. Lida em direto; of_reset repõe-na a false
is_theme_stylestring""Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança
is_theme_modestring""Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque da aplicação, ou o do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido

Métodos #

MétodoDescrição
of_expand_all ( ) → longDesdobra todos os contentores. Nenhum ue_node_toggled: nenhum gesto abre a árvore inteira de uma vez. Devolve 0, -2 se o componente não estiver criado
of_collapse_all ( ) → longDobra todos os contentores aninhados (o nível de cima continua visível). Uma seleção escondida por uma dobra passa para o bloco dobrado, e ue_selection_changed indica-o. Nenhum ue_node_toggled: nenhum gesto dobra a árvore inteira de uma vez. Devolve 0, -2 se o componente não estiver criado
of_expand_path ( string as_path ) → longAbre UM bloco (objeto ou array) pelo seu caminho, e os blocos acima dele para que se veja. Como o seu marcador +, levanta ue_node_toggled para o bloco e para cada bloco dobrado acima dele aberto pelo caminho (nada para um bloco já aberto). Devolve 0, -5 se nenhum bloco tiver esse caminho (desconhecido, ou uma folha), -2 se o componente não estiver criado
of_collapse_path ( string as_path ) → longDobra UM bloco pelo seu caminho. Como o seu marcador −, levanta ue_node_toggled se o bloco estava aberto, e ue_selection_changed quando a seleção tem de passar para ele. Devolve 0, -5 se nenhum bloco tiver esse caminho (desconhecido, ou uma folha), -2 se o componente não estiver criado
of_is_expanded ( string as_path ) → booleantrue se o bloco desse caminho estiver aberto, lido EM DIRETO; false se estiver dobrado, e para uma folha ou um caminho desconhecido. O suficiente para guardar o que o utilizador abriu e restabelecê-lo
of_copy ( ) → longPõe a seleção na área de transferência, como Ctrl+C na árvore: uma folha dá o seu valor DESCODIFICADO (uma cadeia sem aspas nem escapes), um bloco o seu texto JSON indentado. Devolve 0, -4 se nada estiver selecionado, -2 se o componente não estiver criado
of_clear ( ) → longEsvazia a árvore (como is_json = ""); ib_wrap, ib_search_enabled, ib_find_match_case e ib_find_whole_word mantêm o seu valor (é of_reset que repõe tudo). Devolve 0, -2 se o componente não estiver criado
of_expand_to_level ( long al_level ) → longMostra a árvore até al_level: os blocos a essa profundidade ou mais dobram-se (1 = os filhos diretos do bloco raiz, 0 dobra a raiz). Nenhum ue_node_toggled; uma seleção que ele desloca para um bloco dobrado levanta ue_selection_changed. Devolve 0, -2 se o componente não estiver criado
of_search ( string as_query ) → longRealça cada ocorrência (sem distinguir maiúsculas por omissão — ver ib_find_match_case —, só palavras inteiras com ib_find_whole_word; duas numa linha contam duas) e salta para a primeira; só se abrem os blocos que escondem a ocorrência ATUAL, e of_clear_search volta a dobrá-los. ue_search_result diz quantas. A pesquisa incide sobre o texto MOSTRADO: um carácter escapado procura-se escapado (C:\\Temp). Uma pesquisa vazia equivale a of_clear_search. A caixa de pesquisa abre-se com a pesquisa dentro e o foco nela (a mesma que Ctrl+F): Enter passa à seguinte; com ib_search_enabled a false, a árvore apenas realça. Devolve 0, ou um código negativo
of_search_next ( ) → longPassa à ocorrência SEGUINTE (volta à primeira depois da última); ue_search_result dá a nova posição. Devolve 0, ou um código negativo
of_search_prev ( ) → longPassa à ocorrência ANTERIOR (volta à última antes da primeira); ue_search_result dá a nova posição. Devolve 0, ou um código negativo
of_clear_search ( ) → longLimpa a pesquisa: deixa de haver realce e ocorrência atual (of_match_count devolve 0), a caixa de pesquisa esvazia-se e fecha-se, e os blocos que a pesquisa abrira voltam a dobrar-se como antes. Devolve 0, ou um código negativo
of_select_path ( string as_path ) → longSeleciona o nó em as_path e desloca-se até ele; como o teclado, levanta ue_selection_changed (nada se o nó já estiver selecionado); os blocos dobrados que o escondem abrem-se. as_path é um caminho de n_pbt_json (lines/1/sku, "" = a raiz). Devolve 0, -5 se nenhum nó tiver esse caminho (a seleção não se move), -2 se o componente não estiver criado
of_selected_path ( ) → stringO caminho do nó selecionado, lido EM DIRETO: o de n_pbt_json, níveis unidos por / e um índice de array contado a partir de 1 (lines/1/sku), para passar tal como está a of_get_string sobre o mesmo texto. Uma chave vazia ou que contenha / não é endereçável. "" é a raiz, ou nada selecionado: of_has_selection distingue-os
of_selected_value ( ) → stringO valor JSON da linha selecionada quando é uma FOLHA (uma string mantém as aspas, pronta a colar), lido AO VIVO. Vazio para um contentor ou sem seleção
of_selected_text ( ) → stringO VALOR da folha selecionada, descodificado, lido EM DIRETO: uma cadeia sem as aspas nem os escapes, um número ou true/false/null tal como escritos. Vazio para um contentor ou sem seleção
of_has_selection ( ) → booleantrue quando um nó está selecionado, lido EM DIRETO — a raiz incluída, cujo caminho é ""
of_match_count ( ) → longDevolve o número de OCORRÊNCIAS da pesquisa atual (duas numa linha contam duas), lido EM DIRETO — o 12 de uma barra de estado 3 / 12. 0 sem pesquisa
of_match_index ( ) → longDevolve a posição (1-based) da correspondência atual, lida AO VIVO — o 3 de uma barra de estado 3 / 12. 0 sem correspondência

Eventos #

EventoQuando
ue_node_clicked (string as_path)O utilizador clicou num nó, ou premiu Enter numa folha selecionada: o seu caminho, o de n_pbt_json (lines/1/sku, "" para a raiz) — of_get_string(as_path) sobre o mesmo texto lê o seu valor. Enter num bloco dobra-o, e nunca chega ao botão predefinido da janela
ue_node_toggled (string as_path, boolean ab_expanded)Um bloco foi dobrado (ab_expanded = false) ou aberto (true): pelo utilizador (o seu marcador + / −, as setas, Enter ou Espaço) ou por of_expand_path / of_collapse_path. of_expand_all, of_collapse_all e of_expand_to_level não o levantam: nenhum gesto dobra a árvore inteira
ue_selection_changed (string as_path)A seleção moveu-se sem clique, pelo utilizador ou pelo seu código: setas, Home/End, Page Up/Down, of_select_path, ou uma dobra que esconde a linha selecionada (a seleção passa então para o bloco dobrado) — um clique do rato reporta ue_node_clicked
ue_search_result (long al_count, long al_index)Uma pesquisa começou ou avançou: al_count ocorrências no total, a atual é al_index (a partir de 1, 0 se nenhuma) — o suficiente para mostrar «3 / 12»
ue_error (string as_message)O texto em is_json não é um JSON válido: a mensagem diz porquê, com a linha e a coluna, na língua de apresentação; a árvore fica vazia. Levantado também para um documento demasiado grande para ser mostrado (mais de 1 500 000 linhas)

Exemplo #

Explorar a resposta de uma API #

// Fetch the order : the tree shows the response, or empties on a failure
if inv_rest.of_get(/*url*/ "https://api.example.com/orders/4152") = 200 then
	uo_json.is_json = inv_rest.of_response_text()
	uo_json.of_collapse_all()          // the reader opens what interests them
else
	uo_json.of_clear()
end if

Ler o valor de um nó clicado #

// ue_node_clicked of uo_json : the path is the one n_pbt_json reads
n_pbt_json lnv_json

// Read the value at the clicked path with n_pbt_json
lnv_json.of_load(/*json*/ uo_json.is_json)
st_value.text = lnv_json.of_get_string(/*path*/ as_path)

// or, without a second parser : the value of the selected leaf, decoded
st_value.text = uo_json.of_selected_text()

Pesquisar palavras inteiras, com maiúsculas #

// Whole words only, with the same case : "id" is not found inside "user_id"
uo_json.ib_find_match_case = true
uo_json.ib_find_whole_word = true
uo_json.of_search(/*query*/ "id")

Boas práticas #


Herdado da base comum #

Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.

MembrosFunçãoDetalhado em
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades

← Referência dos componentes · Índice do guia