PBToolboxAI v3 ← Site

json — n_pbt_json #

← Referência dos componentes · Índice do guia

Construir um JSON tipo a tipo — texto, número, booleano, array, objeto aninhado — com o escape feito por si, e depois ler um ao longo de um caminho: of_load, of_get_string, of_type, of_count. Um único objeto constrói os seus pedidos e lê as suas respostas. Tudo em PowerScript puro: sem página, sem motor, PowerBuilder 10 incluído.

▶ Ver ao vivo — Aplicação de demonstração, mosaico JSON: os resultados, o código que os produz e esta página, lado a lado.


Em resumo #

n_pbt_json é autoinstantiate: declara-se como variável local, sem create nem destroy. É o mesmo objeto que, internamente, constrói os payloads enviados ao motor — agora oferecido ao seu código, do lado da construção e da leitura.

Início rápido #

Construir um payload, depois reler uma resposta — tudo cabe numa variável local:

n_pbt_json  lnv_json
string      ls_customer
double      ld_total

// Write : each member is typed and escaped for you - a path may have levels
lnv_json.of_set_string("customer", "Ada")
lnv_json.of_set_number("total", 690.50)
lnv_json.of_set_boolean("paid", true)
// lnv_json.of_text() -> {"customer":"Ada","total":690.5,"paid":true}

// Read : load a response, reach values by path
lnv_json.of_load('{"order":{"customer":"Ada","total":690.50}}')
IF lnv_json.of_is_valid() THEN
	ls_customer = lnv_json.of_get_string("order/customer")   // Ada
	ld_total    = lnv_json.of_get_number("order/total")     // 690.5
END IF

Um caminho são as chaves desde a raiz unidas por /; o índice de um array é a sua posição, contada a partir de 0: order/lines/0.


Construir um payload #

MétodoFunção
of_add_string (string as_path, string as_value) → longAcrescenta uma CADEIA, com escape automático, ao ARRAY em as_path. O array tem de existir: abra-o primeiro com of_set_raw e um array vazio. Devolve 0, -4 se as_path faltar ou não for um array
of_add_boolean (string as_path, boolean ab_value) → longAcrescenta um BOOLEANO (true ou false, nunca entre aspas) ao ARRAY em as_path. O array tem de existir: abra-o primeiro com of_set_raw e um array vazio. Devolve 0, -4 se as_path faltar ou não for um array
of_add_number (string as_path, long al_value) → longAcrescenta um NÚMERO (três sobrecargas: integer, long, double) ao ARRAY em as_path. O array tem de existir: abra-o primeiro com of_set_raw e um array vazio. Devolve 0, -4 se as_path faltar ou não for um array
of_add_raw (string as_path, string as_json) → longAcrescenta um valor JÁ em JSON (um objeto, um array) pelo qual responde ao ARRAY em as_path. O array tem de existir: abra-o primeiro com of_set_raw e um array vazio. Devolve 0, -4 se as_path faltar ou não for um array
of_set_array (string as_path, string as_values[]) → longESCREVE um ARRAY inteiro de cadeias em as_path a partir de um array PowerBuilder, cada elemento com escape. Um array vazio escreve um vazio. Mesma regra de caminho e mesmos códigos que of_set_string
of_set_members (string as_fragment) → longFunde na RAIZ membros já formados noutro lado, unidos por vírgulas. Um fragmento vazio não escreve nada. Devolve 0
of_clear ( ) → longEsvazia o documento para começar outro objeto com a mesma variável. Devolve 0
of_text ( ) → stringO documento tal como está (compacto): o que construiu (of_add_string, of_add_number...) ou carregou (of_load), após qualquer alteração — a saída única, pronta a enviar, guardar ou reescrever. of_pretty dá a forma indentada. {} se vazio; chamá-lo não esvazia nada

Ler um documento #

MétodoFunção
of_load (string as_json) → longCarrega um texto JSON para leitura. Devolve 0 se bem formado, -5 se o argumento estiver vazio, -4 se não for JSON válido (o documento é então descartado). Analisa em PowerScript puro
of_is_valid ( ) → booleanVerdadeiro quando o último of_load foi bem-sucedido
of_exists (string as_path) → booleanVerdadeiro quando existe um valor no caminho dado — distingue um valor presente mas vazio de um ausente
of_type (string as_path) → stringO tipo JSON no caminho: object, array, string, number, boolean, null; vazio se ausente
of_get_string (string as_path) → stringO valor no caminho, como texto: uma string volta descodificada, um número/booleano/null como texto, um objeto ou array como JSON em bruto (recarregável com of_load)
of_get_number (string as_path) → doubleO número no caminho, como double — o ponto decimal é respeitado em qualquer máquina (2.5 é 2,5, não 2). 0 se ausente
of_get_boolean (string as_path) → booleanO booleano no caminho: verdadeiro apenas para o literal JSON true
of_count (string as_path) → longO número de membros do objeto, ou de elementos do array, no caminho. Devolve -1 se o valor for escalar ou ausente (distingue um array vazio, 0, de um em falta, -1)
of_name (string as_path, long al_index) → stringO nome do membro n.º al_index (a partir de 1) do objeto no caminho — para ler as chaves de um objeto de forma desconhecida. Com of_count, percorre o objeto
of_pretty ( ) → stringO documento carregado, reindentado para leitura (várias linhas, tabulações) — um log, uma caixa de texto. Vazio se nada de válido estiver carregado

Modificar um documento #

O lado de escrita altera o documento carregado no lugar, depois of_text devolve o resultado (compacto) — o que se reescreve. Os setters substituem o valor no caminho, ou acrescentam a última chave quando falta a um objeto pai. Cada um devolve 0, -4 quando o pai falta ou é do tipo errado, -5 num caminho vazio.

MembroFunção
of_set_string (string as_path, string as_value) → long → longESCREVE uma cadeia em as_path, com escape automático. O caminho pode ter VÁRIOS níveis (a/b/c): os que faltam são criados como OBJETOS, e um documento VAZIO passa a sê-lo — escrever É construir. Um valor já presente é substituído, onde quer que esteja. Devolve 0, -4 se um nível do caminho for um escalar ou um array, -5 com um caminho vazio
of_set_number (string as_path, long al_value) → long → longESCREVE um NÚMERO em as_path, o ponto decimal forçado. Três sobrecargas: integer, long, double. Mesma regra de caminho e mesmos códigos que of_set_string
of_set_boolean (string as_path, boolean ab_value) → long → longESCREVE um BOOLEANO em as_path: true ou false, nunca entre aspas. Mesma regra de caminho e mesmos códigos que of_set_string
of_set_raw (string as_path, string as_json) → long → longESCREVE em as_path um valor JÁ em JSON — um objeto aninhado, um array, null — tal como está: responde por ele. É também assim que se ABRE um array antes de of_add_*. Mesma regra de caminho e mesmos códigos que of_set_string
of_remove (string as_path) → longRemove o valor no caminho — um membro de objeto (a sua chave e uma vírgula vão com ele) ou um elemento de array; o resultado permanece válido
n_pbt_json  lnv_json

// Load, edit in place, then read back the ONE document with of_text
lnv_json.of_load('{"name":"Ada","active":false}')
lnv_json.of_set_string("name", "Grace")   // replace
lnv_json.of_set_boolean("active", true)
lnv_json.of_set_number("count", 3)        // added : the key was absent
// lnv_json.of_text() -> {"name":"Grace","active":true,"count":3}

Âmbito. O JSON analisa-se em PowerScript puro, sem página nem motor: n_pbt_json continua autoinstantiate e funciona em todo o lado, PowerBuilder 10 incluído. Para XML, veja xml (que assenta no motor); para mostrar um JSON como árvore recolhível, veja jsontree.

← Referência dos componentes · Índice do guia