I dizionari sono strutture di dati che associano un valore, spesso chiamato chiave (Key), con un altro valore. Un modo comune di visualizzare dizionari è l’utilizzo di JSON. I blocchi dizionari appartengono ad App Inventor 2 e Kodular: Per Thunkable X i concetti sono molto simili e la pagina viene chiamata Componenti Oggetti.
- http://ai2.appinventor.mit.edu/reference/blocks/dictionaries.html
- https://docs.kodular.io/blocks/dictionaries/
Contenuti:
- Introduzione
- create empty dictionary
- make a dictionary
- pair
- get value for key
- set value for key
- delete entry for key
- get value at key path
- set value for key path
- get keys
- get values
- is key in dictionary?
- size of dictionary
- list of pairs to dictionary
- dictionary to list of pairs
- copy dictionary
- merge into dictionary
- list by walking key path
- walk all at level
- is a dictionary?
App Inventor 2 | Kodular |
---|---|
Fig.: Le due liste dei componenti
Premessa
JSON (JavaScript Object Notation) https://www.json.org/json-it.html è un noto formato di scambio di dati utilizzato dalle interfacce API.
JSON consente di raggruppare un vasto numero di dati in un’unica porzione di testo e di inviarli a un altro servizio. Grazie a Json è possibile dialogare tra più linguaggi di programmazione. È adattabile ad ogni tipo di situazione, oltre ad essere dotato di una struttura davvero semplice, in grado di consentire agli sviluppatori di comprendere immediatamente, il significato di ciò che stiamo vedendo. Attraverso le poche righe di codice, infatti, il programmatore può leggere facilmente l’output e di conseguenza può realizzare degli script articolati, che sfruttano i dati provenienti dai Social Network o dai Servizi Web.
Questa sua caratteristica non è per niente una cosa da poco, ed è un qualcosa di fondamentale importanza quando si eseguono lavori su progetti vasti ed impegnativi. JSON, JSV & XML sono i tre formati più utilizzati per la gestione di questi dati.
Nei linguaggi di programmazione assume diversi nomi: record, oggetto, struct, tabella hash, elenco di chiavi, mappa, array associativo, matrice associativa.
I dizionari (o Oggetto), sono strutture di dati a coppia (pairs) che associano un valore chiave (Key), con un altro valore.
Le coppie oltre a chiave/valore, si chiamano anche nomi/valori o stringhe/valori.
Un modo comune di visualizzare dizionari è l’utilizzo di JavaScript Object Notation (JSON [1]), cioè un file di testo del tipo:
{
"id": 1,
"name": "Tim the Beaver",
"school": {
"name": "Massachusetts Institute of Technology"
},
"enrolled": true,
"classes": ["6.001", "18.01", "8.01"]
}
Se lo vogliano leggere sequenzialmente, sarà:
{
"id":1,
"name":"Tim the Beaver",
"school":
{
"name":"Massachusetts Institute of Technology"
},
"enrolled": true,
"classes": ["6.001", "18.01", "8.01"]
}
Nel Dizionario contenuto all’interno di {}
, vediamo che ci sono cinque Coppie separate da ,
:
"id":1,
"name":"Tim the Beaver",
"school":
{
"name":"Massachusetts Institute of Technology"
},
"enrolled": true,
"classes": ["6.001", "18.01", "8.01"]
di cui le Key sono:
"id"
"name"
"school"
"enrolled"
"classes"
e i relativi Valori sono (un’attenzione ai simboli ""
:
[]
):
- il numero
1
- una stringa
"Tim the Beaver"
- un altro dizionario formato dalla coppia
"name":"Massachusetts Institute of Technology"
- un valore booleiano
true
- una Lista (o Array in alcuni linguaggi)
["6.001", "18.01", "8.01"]
Caricare JSON
Per caricare il file bisogna essere in possesso dell’URL ed aver caricato il componente WEB del Gruppo Connettività:
Normalmente per accedere alle API i siti chiedono una registrazione (https://newsapi.org/) e fanno pagare un abbonamento, ma altri possono essere gratuiti : https://apilist.fun/ ; https://any-api.com/ .
Se il tuo Browser non ha la funzione JSON, per una migliore lettura consiglio il sito https://jsonformatter.org/
Leggi l’articolo completo qui.
Esempio di blocchi
L’esempio precedente mostra che in JSON le Key (testo tra virgolette prima dei due punti ) possono essere associate a diversi tipi di valori. I tipi consentiti sono numeri, testo, altri dizionari, booleani ed elenchi. Nella lingua dei blocchi, puoi costruire questo dizionario come segue:
Figura 1 : una rappresentazione a blocchi dello snippet di codice JSON mostrato sopra.
Crea un dizionario vuoto – create empty dictionary
Il blocco create empty dictionary
crea un dizionario senza coppie chiave-valore. Le voci possono essere aggiunte al dizionario vuoto usando il blocco set value for key
. Il blocco create empty dictionary
può anche essere trasformato in un blocco make a dictionary
utilizzando il pulsante di mutatore blu per aggiungere voci pair
(coppia).
Componi un dizionario – make a dictionary
Il make a dictionary
viene utilizzato per creare un dizionario con una serie di coppie note in anticipo. Ulteriori voci possono essere aggiunte utilizzando set value for key
.
Coppia – pair
Il blocco coppia è un blocco speciale utilizzato per costruire dizionari.
Ottieni valore da chiave – get value for key
Il blocco get value for key verifica se il dizionario contiene un valore corrispondente per la chiave specificata. In tal caso, il valore viene restituito. In caso contrario, il valore del parametro not found
(non trovato) viene restituito . Questo comportamento è simile al comportamento del blocco Liste lookup in pairs.
Imposta valore da chiave – set value for key
Il blocco set value for key
imposta il valore corrispondente per il dato key
nel dictionary
a value
. Se non esiste alcuna mappatura per key
, ne verrà creata una nuova. In caso contrario, il valore esistente viene sostituito dal nuovo valore.
Elimina entrate per chiave – delete entry for key
Il blocco delete entry for key
rimuove la combinazione (mappatura) dei valori/chiave nel dizionario per la chiave specificata. Se nel dizionario non esiste alcuna voce per la chiave, il dizionario non viene modificato.
Ottieni valore a percorso di chiave – get value at key path
Il blocco get value at key path
è una versione più avanzata del get value for key
. Invece di ottenere il valore di una chiave specifica, prende invece un elenco di chiavi e numeri validi che rappresentano un percorso attraverso una struttura di dati. Il blocco get value for key
equivale a utilizzare questo blocco con un percorso chiave di lunghezza 1 contenente la chiave. Ad esempio, i seguenti due blocchi restituirebbero “Tim the Beaver“: Questo scorre la struttura dei dati, a partire dal dizionario iniziale, usando il path (percorso) fornito, al fine di recuperare i valori nidificati in profondità nelle strutture di dati complessi. È utilizzato al meglio per l’elaborazione di dati JSON da servizi Web. A partire dall’input iniziale, prende il primo elemento in key path
e controlla se in quel punto esiste una chiave (se l’input è un dizionario) o un indice (se l’input è un elenco). In tal caso, seleziona quell’elemento come input e procede a controllare l’elemento successivo in key path
, continuando fino a quando non è stato seguito l’intero percorso, a quel punto restituisce ciò che si trova in quella posizione o il parametro not found
(non trovato) .
Esempi
{
"id": 1,
"name": "Tim the Beaver",
"school": {
"name": "Massachusetts Institute of Technology"
},
"enrolled": true,
"classes": ["6.001", "18.01", "8.01"]
}
Ad esempio, dato il dizionario JSON sopra, il seguente uso get value at key path
produrrà il risultato “Massachusetts Institute of Technology”. Il get value at key path<
consente al percorso di includere numeri che rappresentano l’indice degli elementi da attraversare quando i dizionari e gli elenchi vengono mescolati. Ad esempio, se volessimo conoscere la seconda classe
che stava prendendo Tim, potremmo fare quanto segue: che restituisce il valore “18.01”.
Imposta valore a percorso di chiave – set value for key path
Il blocco set value for key path
aggiorna il valore a uno specifico
in una struttura di dati. È accoppiato al key
pathget value at key path
, che recupera un valore in uno specifico key path
. Il percorso deve essere valido , ad eccezione dell’ultima chiave, che se non esiste un mapping creerà un mapping al nuovo valore. In caso contrario, il valore esistente viene sostituito con il nuovo valore.
Ottieni chiavi – get keys
Il get keys
restituisce un elenco di chiavi nel dizionario.
Ottieni valori – get values
Il get values
restituisce una lista contenente i valori nel dizionario. La modifica del contenuto di un valore nell’elenco lo modificherà anche nel dizionario.
La chiave è nel dizionario? – is key in dictionary?
Il is key in dictionary?
testa se esiste la chiave nel dizionario e ritorna true
se lo fa, altrimenti restituisce false
.
Dimensione del dizionario – size of dictionary
Il blocco size of dictionary
restituisce il numero di coppie chiave-valore presenti nel dizionario.
Lista di coppie a dizionario – list of pairs to dictionary
Il blocco list of pairs to dictionary
converte un elenco associativo del modulo ((key1 value1) (key2 value2) ...)
in un dizionario che associa le chiavi ai loro valori. Poiché i dizionari offrono prestazioni di ricerca migliori rispetto alle Liste, se si desidera eseguire molte operazioni su una struttura di dati, è consigliabile utilizzare questo blocco per convertire prima la Lista in un Dizionario.
Dizionario a lista di coppie – dictionary to list of pairs
Il dictionary to list of pairs
converte un dizionario in una Lista. Questo blocco inverte la conversione eseguita dal blocco list of pairs to dictionary. Esempio di come il dizionario per elencare il blocco di coppie inverte l’elenco di coppie nel blocco di dizionario
Copia dizionario – copy dictionary
Il copy dictionary
fa una copia profonda del dizionario dato. Ciò significa che tutti i valori vengono copiati in modo ricorsivo e che la modifica di un valore nella copia non lo modificherà nell’originale.
Unisci nel dizionario – merge into dictionary
Il blocco merge into dictionary from dictionary
copia le coppie chiave-valore da un dizionario a un altro, sovrascrivendo qualsiasi chiave nel dizionario di destinazione.
List by walking key path
Il list by walking key path
funziona in modo simile al get value at key path
, ma crea un elenco di valori anziché restituire un singolo valore. Funziona partendo dal dizionario dato e “cammina” (walking) lungo l’albero degli oggetti seguendo il percorso indicato. A differenza del get value at key path
però, il suo percorso può essere composto da tre tipi principali: chiavi del dizionario, indici di elenco e il blocco walk all at level
. Se viene fornita una chiave o un indice, il percorso specifico viene preso in quel punto dell’albero. Se walk all at level
viene specificato, ogni valore in quel punto viene seguito in successione (larghezza prima), a quel punto la camminata continua dall’elemento successivo nel percorso. Qualsiasi elemento che corrisponde all’intero percorso viene aggiunto all’elenco di output.
Esempi. Considera i seguenti JSON e blocchi:
{
"people": [{ "first_name": "Tim",
"last_name": "Beaver"
},{
"first_name": "John",
"last_name": "Smith",
},
{
"first_name": "Jane",
"last_name": "Doe"
}]
}
Se global data contiene un dizionario rappresentato da JSON, il list by walking key path
produrrà l’elenco [“Tim”, “Beaver”]. Innanzitutto, il tag del valore “people” , che è l’elenco delle persone, viene scelto. Successivamente, viene scelto il primo elemento nell’elenco. Infine, il blocco walk all at level
seleziona i valori nell’oggetto in quel punto, cioè i valori “Tim”e “Beaver”.
È inoltre possibile utilizzare walk all at level
a un livello contenente un elenco. Ad esempio, il blocco seguente seleziona i nomi (first name = nomi propri n.d.r.) di tutte le persone nella struttura, ad es [“Tim”, “John”, “Jane”]. Questo blocco può essere utilizzato anche con XML parsed (= analizzatore di XML. Tutti i principali browser hanno un analizzatore XML integrato per accedere e manipolare XML) utilizzando il blocco Web.XMLTextDecodeAsDictionary .
Considera il seguente documento XML:
<schedule>
<day>
<room name="Hewlitt" />
<room name="Bleil" />
</day>
<day>
<room name="Kiva" />
<room name="Star" />
</day>
</schedule>
È possibile utilizzare i seguenti blocchi per ottenere un elenco dei nomi delle stanze il primo giorno, ad es [“Hewlitt”, “Bleil”].
Walk all at level
Il walk all at level
è un blocco specializzato che può essere utilizzato nel percorso chiave di a list by walking key path
. Quando viene incontrato durante un percorso (path), viene esplorato ogni oggetto a quel livello. Per i dizionari, ciò significa che viene visitato ogni valore. Per le Liste, ogni elemento nell’elenco viene visitato. Questo può essere usato per aggregare informazioni da un elenco di elementi in un dizionario, come il nome di ogni persona in un database rappresentato da oggetti JSON. Vedi il blocco list by walking key path
per esempi.
E’ un dizionario? – is a dictionary?
Il blocco is a dictionary?
verifica se la “cosa” data (valore/oggetto) è un dizionario o meno. Restituirà true
se il valore/oggetto è un dizionario e in caso false
contrario. https://community.appinventor.mit.edu/t/one-way-to-store-daily-appointments-in-a-dictionary-structure/9723
[1] Un interessante articolo sui dati JSON si trova qui http://ai2.appinventor.mit.edu/reference/other/json-web-apis.html .
Aggiornato al 09/11/2021 | |
Aggiornato al 09/11/2021 | |
PDF Lista comparazione dei componenti di AI2 KODULAR THUNKABLEX agg.20210911
Vuoi avere più informazioni sul Coding visuale? Vai alla pagina dei Blocchi incorporati dove potrai imparare a scrivere il linguaggio di programmazione per App Inventor 2, Kodular e Thunkable X. Visita la pagina del Blog con le ultime notizie sulle le tre piattaforme. Nella pagina Documentazione troverai i collegamenti ai forum, il glossario, i link ai siti dei migliori programmatori, i download e tanti altri accessori.