JSON come GET parameter: si può impostare un oggetto JSON come parametro GET? Sì, diversamente non esisterebbe questo articolo dove ne parlo!
All’interno del mondo web, senza dubbio se ci programmi non potrai fare a meno di ciò che è il JSON nella sua interezza. Mi sono capitati pochi “corner case” a riguardo e uno fra tutti è proprio l’oggetto di questo articolo.
Mi è capitato a livello lavorativo questa situazione: “Si potrà mai utilizzare un oggetto o addirittura un array in formato JSON come parametro e dunque come GET parameter in una richiesta HTTP?”.
La risposta è “Ma certo che sì!”, di fatto ne parliamo proprio ora: ma prima permettimi di dirti chi sono per parlarne.
Mi chiamo Lorenzo Neri e sono un informatico: questo articolo, come raccontavo poco fa, è frutto di errori e soluzioni nate durante la mia vita professionale. E quale miglior modo se non creando articoli come questo per aiutare persone come te?
Incominciamo.
Impostare un oggetto e/o un array JSON come parametro GET in una richiesta HTTP
Prima di creare confusione fra i vari protocolli del mondo dello sviluppo web, quando dico “GET parameter” faccio riferimento al metodo GET del protocollo HTTP.
Chiarito questo, immagina di avere il seguente JSON:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
Se ti stessi chiedendo da dove l’ho tirato fuori, esiste un sito web utilissimo per fare degli esempi JSON: di fatto si chiama https://json.org/example.html 😀
Ora, messo così, se lo impostassi come parametro GET di una richiesta HTTP, una roba stile:
https://www.il_tuo_sito.com?parametro={
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
… Sono abbastanza certo che qualche erroraccio al tuo back-end o solo già dalla chiamata stessa salta fuori.
E quindi come impostare del JSON come GET parameter?
È necessario fare l’encoding di tutti i caratteri particolari fra cui parantesi, punti e virgola eccetera che compongono il tuo stesso JSON!
Per intenderci, dobbiamo rendere il JSON stesso URL-encorded e prendendo l’esempio precedente, verrebbe fuori così:
%7B%0A%20%20%20%20%22glossary%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22title%22%3A%20%22example%20glossary%22%2C%0A%09%09%22GlossDiv%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22title%22%3A%20%22S%22%2C%0A%09%09%09%22GlossList%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22GlossEntry%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ID%22%3A%20%22SGML%22%2C%0A%09%09%09%09%09%22SortAs%22%3A%20%22SGML%22%2C%0A%09%09%09%09%09%22GlossTerm%22%3A%20%22Standard%20Generalized%20Markup%20Language%22%2C%0A%09%09%09%09%09%22Acronym%22%3A%20%22SGML%22%2C%0A%09%09%09%09%09%22Abbrev%22%3A%20%22ISO%208879%3A1986%22%2C%0A%09%09%09%09%09%22GlossDef%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22para%22%3A%20%22A%20meta-markup%20language%2C%20used%20to%20create%20markup%20languages%20such%20as%20DocBook.%22%2C%0A%09%09%09%09%09%09%22GlossSeeAlso%22%3A%20%5B%22GML%22%2C%20%22XML%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%09%09%09%09%22GlossSee%22%3A%20%22markup%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D
In questo modo, se imposti l’intera stringa che ti ho appena mostrato come parametro GET della tua richiesta HTTP, non dovresti aver problemi.
… A dire il vero ne hai uno… Anzi due!
Il primo, è condividere questo articolo se pensi possa tornare utile a qualcuno!
Il secondo è come fare un JSON URL-encoded vero? 😉
Non ti preoccupare, puoi trovare uno strumento utile a distanza di un click esattamente qui!